有谁知道如何轻松撤消 git rebase?
想到的唯一方法是手动进行:
在我目前的情况下,这将是有效的,因为我可以很容易地发现两个分支的提交(一个是我的东西,另一个是我的同事的东西)。
然而,我的方法让我感到不理想和容易出错(假设我刚刚用自己的 2 个分支进行了重新定位)。
有任何想法吗?
澄清:我正在谈论一个重播,在此期间重播了一堆提交。不仅仅是一个。
最简单的方法是找到分支的头部提交,就像在reflog 中启动 rebase 之前一样...
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
因此,如果您已经尝试撤消的 rebase 中已经执行了任何这些命令,那么您将不得不使用 reflog。
查尔斯的答案有效,但你可能想这样做:
git rebase --abort
reset
后清理。
否则,您可能会收到消息 “ Interactive rebase already started
”。