回答

收藏

撤消 git rebase

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

有些人知道如何轻松取消  git rebase 吗?
; A; |( _/ M5 F& O+ m3 y5 c  _唯一想到的方法就是手动做:
3 J/ L  G; T, [5 B$ w; ^- sgit checkout 两个分支提交父级4 c5 \& ^2 u3 b$ R
然后从那里创建临时分支- X" n2 q* l  f# k
手工选择所有提交
' L9 L  ^& P4 P1 M用手动创建的分支代替我重新设置的分支7 H* {: M# O$ g4 I! n+ U
在我目前的情况下,这将起作用,因为我很容易找到两个分支的提交(一个是我的,另一个是我同事的)。
, V) A8 C' g- h但是,我的方法给我的印象是次优,容易出错(假设我只是用自己的 2 分支重新设置了基础)。
* U0 K; {8 k: O0 i5 t8 d" Y8 @有什么想法吗?8 }7 [) u; f& g* ]: L
澄清:我说的是重放一堆提交。rebase。不止一个。
; g- O& d) R) J# i6 a# \% H                                                               
, i9 k) |4 t/ s    解决方案:                                                                , G9 o0 A" Z& E7 \+ y, O& J
                                                                最简单的方法是找到分支的头部提交,因为它是在reflog 中rebase 开始前一刻......0 |& r0 F+ O( g
git reflog并将当前的分支重置为它(通常需要注意的是,它正在使用–hard绝对确定选项重置前)。0 s$ ]1 y3 e/ q$ B* y: m
假设旧的提交HEAD@{2}在 ref 日志中:" b) J& N/ \! k( w+ d# s
git reset --hard HEAD@{2}在 Windows 您可能需要参考:
+ L' \& B; Q, v- A5 H& u, J8 Z3 \git reset --hard "HEAD@{2}"您只需执行git log HEAD@{2}( Windows: git log "HEAD@{2}" )可以检查候选老人的历史记录。4 h7 W6 o, e) G0 x1 }
如果不禁用每个分支 reflogs,你应该能够简单地做,git reflog branchname@{1}因为在重新连接到最终头之前,rebase它将分离分支。尽管我最近没有验证,但我会仔细检查这一点。5 m+ e* V) w- w) r0 f
所有 在默认情况下reflogs 将激活非裸储存:
; I- X- M0 R3 [, d+ \, ?2 ^[core]    logAllRefUpdates = true
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则