回答

收藏

撤消 git rebase

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

有些人知道如何轻松取消  git rebase 吗?* r- F& X# \# H0 G1 G) X
唯一想到的方法就是手动做:/ Q+ y6 L  `8 l' K( y& `
git checkout 两个分支提交父级/ n% G5 Z3 M/ [# f3 ]8 S8 j
然后从那里创建临时分支. h! ?  q. a: |. J$ I5 k
手工选择所有提交8 Q9 Y5 C7 }$ k* Y# x% b6 m$ @
用手动创建的分支代替我重新设置的分支2 }, w" I  J- A8 m- h
在我目前的情况下,这将起作用,因为我很容易找到两个分支的提交(一个是我的,另一个是我同事的)。" }3 G% }. B% D) |1 }" e" S+ {
但是,我的方法给我的印象是次优,容易出错(假设我只是用自己的 2 分支重新设置了基础)。2 I, X. K' @) m4 S, w/ j) x
有什么想法吗?1 U" }( m+ p/ Z! S8 Y/ X
澄清:我说的是重放一堆提交。rebase。不止一个。
* z' d, k6 y/ H9 p: q/ V+ t; ]( m                                                                # v% v* P1 ]/ v, I
    解决方案:                                                               
( o( B3 a* t6 J) C                                                                最简单的方法是找到分支的头部提交,因为它是在reflog 中rebase 开始前一刻......
& \/ s: S* n( W" o7 t! j3 M) _. bgit reflog并将当前的分支重置为它(通常需要注意的是,它正在使用–hard绝对确定选项重置前)。
9 o$ z7 g  N3 ~; F) I# [5 x假设旧的提交HEAD@{2}在 ref 日志中:
5 M5 F, Q" O3 |! xgit reset --hard HEAD@{2}在 Windows 您可能需要参考:% u5 H  [* ~2 A& {8 H
git reset --hard "HEAD@{2}"您只需执行git log HEAD@{2}( Windows: git log "HEAD@{2}" )可以检查候选老人的历史记录。
% Z& K. `6 k3 e如果不禁用每个分支 reflogs,你应该能够简单地做,git reflog branchname@{1}因为在重新连接到最终头之前,rebase它将分离分支。尽管我最近没有验证,但我会仔细检查这一点。( ?$ X& o  p' I9 j+ l
所有 在默认情况下reflogs 将激活非裸储存:: s+ U- B3 f8 l9 V
[core]    logAllRefUpdates = true
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则