我可以重置为rebase中间的任何提交吗?

时间:2015-04-24 19:28:14

标签: git version-control

我启动了一个交互式rebase来编辑一些提交。虽然一切顺利但我最后两次提交搞砸了(我不小心压扁了它们)。现在我希望在编辑最后两次提交之前我是否可以重置为提交,并且仍然处于我开始的那个rebase的中间。我可以看到reflog中的步骤,但如果我重新设置任何这些步骤,我只能回到那个提交而不是那个rebase会话。如果我只想编辑最后两次提交(因为之前的所有内容都很好),我有什么方法可以做到这一点或者我有什么选择?

1 个答案:

答案 0 :(得分:1)

最简单的方法是找到分支的头部提交,就像在reflog中的rebase开始之前......

git reflog

并将当前分支重置为它(关于在使用--hard选项重置之前绝对确定的常见警告)。

# Suppose the old commit was HEAD@{5} in the ref log
git reset --hard HEAD@{5}

您只需执行git log HEAD@{5} .

即可查看候选老头的历史记录

如果你已经启用了每个分支reflogs,你应该能够简单地执行git reflog branchname@{1},因为rebase会在重新连接到最终头部之前分离分支头。我会仔细检查这一点,尽管我最近还没有对此进行过验证。您可以通过添加:

来完成此操作
[user]
    logallrefupdates=true

为了更安全,请先备份:git tag BACKUP。如果出现问题,您可以返回它:git reset --hard BACKUP

我发现这link非常有帮助。

感谢。