撤消git rebase
有人知道如何轻松地撤销git rebase吗?
想到的唯一方法是手动进行:
在我目前的情况下,这是可行的,因为我可以很容易地发现两个分支提交(一个是我的东西,另一个是我的同事的东西)。
然而,我的方法让我觉得不理想,并且容易出错(假设我刚刚在我自己的分支中重组了2个)。
有任何想法吗?
澄清:我正在谈论重新发布一系列提交时的转义。 不只一个。
最简单的方法是找到分支的头部提交,因为它是在reblog开始之前立即进行的。
git reflog
并重新设置当前分支(通常在使用--hard
选项重设前通常需要注意的事项)。
假设旧的提交在ref日志中是HEAD@{5}
:
git reset --hard HEAD@{5}
在Windows中,您可能需要引用该引用:
git reset --hard "HEAD@{5}"
您可以通过执行git log HEAD@{5}
(Windows: git log "HEAD@{5}"
)来检查候选人老头的历史git log "HEAD@{5}"
。
如果你没有禁用每个分支reflogs,你应该可以简单地做git reflog branchname@{1}
作为rebase分离分支头,然后重新附加到最后的头部。 我会仔细检查一下,尽管最近我还没有证实这一点。
默认情况下,所有reflog都针对非裸仓库激活:
[core]
logAllRefUpdates = true
实际上,rebase将您的起点保存到ORIG_HEAD
所以这通常很简单:
git reset --hard ORIG_HEAD
但是, reset
, reset
rebase
和merge
都会将原始HEAD
指针保存到ORIG_HEAD
因此,如果您在尝试撤消重新绑定后执行了任何这些命令,则必须使用reflog。
查尔斯的答案有效,但你可能想这样做:
git rebase --abort
reset
后清理。
否则,您可能会收到消息“ Interactive rebase already started
”。
上一篇: Undoing a git rebase