回答

收藏

撤消 git rebase

技术问答 技术问答 273 人阅读 | 0 人回复 | 2023-09-11

有些人知道如何轻松取消  git rebase 吗?7 d+ m. l9 ], ?/ m; L% R1 y
唯一想到的方法就是手动做:
. C) U* K8 b( F/ jgit checkout 两个分支提交父级
) |9 V# p/ o" V' T# W9 c然后从那里创建临时分支
. |$ f% X! A6 h. r" M0 i手工选择所有提交0 Y2 M. @" \; m1 z: w; X
用手动创建的分支代替我重新设置的分支
7 |9 A1 \. a1 x6 f0 k! b2 w! M在我目前的情况下,这将起作用,因为我很容易找到两个分支的提交(一个是我的,另一个是我同事的)。. C/ o0 V% w) j0 k, W
但是,我的方法给我的印象是次优,容易出错(假设我只是用自己的 2 分支重新设置了基础)。# A5 P, O) U  r% Q* {4 A
有什么想法吗?
6 \- s$ `, ~( h% M/ v9 X1 Z澄清:我说的是重放一堆提交。rebase。不止一个。$ N; y& t, {: }+ Z" ]9 d. e
                                                               
' g8 c% e0 B" W# o    解决方案:                                                               
5 o! H! Q  b  u6 N# W. J+ Z                                                                最简单的方法是找到分支的头部提交,因为它是在reflog 中rebase 开始前一刻......
; G2 F- q8 j( M6 M% ]' x$ zgit reflog并将当前的分支重置为它(通常需要注意的是,它正在使用–hard绝对确定选项重置前)。' B' Y/ J: C4 l: i) j
假设旧的提交HEAD@{2}在 ref 日志中:
! X, [# V/ l. F) X* _, f  Bgit reset --hard HEAD@{2}在 Windows 您可能需要参考:
/ f) w* N! a  z) Sgit reset --hard "HEAD@{2}"您只需执行git log HEAD@{2}( Windows: git log "HEAD@{2}" )可以检查候选老人的历史记录。
# v' I! G$ H9 @& d5 `' w如果不禁用每个分支 reflogs,你应该能够简单地做,git reflog branchname@{1}因为在重新连接到最终头之前,rebase它将分离分支。尽管我最近没有验证,但我会仔细检查这一点。
0 [' \: Y, K/ t7 m$ `$ d6 g所有 在默认情况下reflogs 将激活非裸储存:( I8 s9 ]$ l  G# Y" Y
[core]    logAllRefUpdates = true
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则