Git:撤销历史重写?

5

我有以下情况的问题:

  • 多个提交被推送到远程(我们的代码审查系统)
  • 开发人员在本地重写了历史记录(在rebase期间编辑了某些提交)
  • 尝试再次推送时,代码审查不接受它(因为此更改可能已经通过审核)

如何将“单个”提交“重置”为该远程提交的内容?

修改后的提交并不总是HEAD,因此我不能简单地执行“git reset --hard HEAD^ && git pull”。

编辑:

最好创建两个版本之间的差异作为一个新的提交,但这并不是必要的。


重置是什么意思?要删除提交吗?如果是这样,请查看 git rebase,特别是 git rebase -i the-commit-id^ - fajran
@fajran:不,我不想删除提交。我想让它与我的远程提交完全相同。 - Daniel Sloof
所以你想让你的分支与远程完全一样?你可以先fetch远程,然后再branch它。 - fajran
@fajran:不,只有一个提交。 - Daniel Sloof
1个回答

7

使用以下命令检查reflog:

git reflog

然后选择与您选择的提交相对应的HEAD,例如:
git reset --hard HEAD@{5}

这将把您的分支重置到五个提交之前HEAD指向的点。


1
我知道reflog,但在rebase期间从未想过使用它。谢谢。 - Daniel Sloof
根据这里右侧的另一个问题,显然我也可以执行“git reset --hard ORIG_HEAD”。但是,reflog似乎是最可靠的方法。 - Daniel Sloof
1
reflog 是一个救命稻草 :) - ralphtheninja
reflog做到了它的工作。以前不知道这个好工具,谢谢@ralphtheninja。 - mFlorin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接