有人知道如何轻松撤消 git rebase 吗?
想到的唯一方法是手动进行:
git checkout 两个分支的提交父级 然后从那里创建一个临时分支 手工挑选所有提交 用手动创建的分支替换我重新设置的分支 在我目前的情况下,这将起作用,因为我可以轻松地发现来自两个分支的提交(一个是我的东西,另一个是我同事的东西)。
然而,我的方法给我的印象是次优且容易出错(假设我刚刚用我自己的 2 个分支重新设置了基础)。
有任何想法吗?
澄清:我说的是重放一堆提交的rebase。不止一个。
最简单的方法是找到分支的头部提交,因为它是在reflog 中rebase 开始之前的那一刻......
git reflog
并将当前分支重置为它(通常需要注意的是在使用–hard选项重置之前要绝对确定)。
假设旧的提交HEAD@{2}在 ref 日志中:
git reset --hard HEAD@{2}
在 Windows 中,您可能需要引用参考:
git reset --hard "HEAD@{2}"
您只需执行git log HEAD@{2}( Windows: git log "HEAD@{2}" )即可检查候选老头的历史记录。
git log HEAD@{2}( Windows: git log "HEAD@{2}" )
如果您没有禁用每个分支 reflogs,您应该能够简单地做,git reflog branchname@{1}因为在重新连接到最终头之前,rebase会分离分支头。我会仔细检查这一点,尽管我最近没有验证这一点。
git reflog branchname@{1}
默认情况下,所有 reflogs 都会为非裸存储库激活:
[core] logAllRefUpdates = true