我经常使用git rebase --交互式的来清理历史记录。可能会有合并冲突,或者即使没有冲突,仍然会有合并。我总是有点害怕有些东西已经改变了,即使我只是改变了提交的顺序,挤压了它们等等。
我过去经常保留我的工作树的备份副本,以便粘贴到新的树上。然后,我查看了gitg中的提交窗口,看看是否一切都一样。这是一个痛苦,但我停止了备份副本。
接下来,我创建了一个备份分支,我发现git diff backup-branch可以正常工作。
现在我尝试了:(因为我也想停止创建备份分支)
git --diff HEAD ORIG_HEAD但这显示了更改,而当我查看我的工作目录中的文件时,它看起来没有更改。
此场景的正确命令是什么?
发布于 2012-05-19 02:36:08
在这种情况下,交互式的rebase从检出开始,出于某种原因,在检出之后设置了ORIG_HEAD。实际上,在rebase进行签出之前,您希望与作为头部的提交进行比较。你可以在reflog中找到它:
git reflog查找最接近顶部的结帐,并与下一行中的提交进行比较。如果你的reflog看起来像这样:
ec4bd97 HEAD@{0}: rebase -i (finish): returning to refs/heads/big_cat_branch
ec4bd97 HEAD@{1}: rebase -i (fixup): Divide the bug class into modules
5d62142 HEAD@{2}: rebase -i (fixup): updating HEAD
c28c562 HEAD@{3}: checkout: moving from big_cat_branch to c28c562
7f6bc0e HEAD@{4}: commit: Fix bug related to big cats.然后,您想要像这样进行不同:
git diff HEAD 7f6bc0e或
git diff HEAD HEAD@{4}除非交互式的rebase实际更改了代码中的某些内容,否则您不会期望任何输出。
如果您能从reflog中提取该条目,那就太好了,但除了让ORIG_HEAD (使用git rev-parse ORIG_HEAD)指向提交,在reflog中获取提交,并查看以下行之外,我不知道有什么简单的方法。您可以编写一个脚本来执行此操作,但手动找到它并不难。
(您可能认为ORIG_HEAD^会给您想要的东西,但在提交历史记录中,这给了您在提交历史记录中ORIG_HEAD之前的提交,而不是在本地reflog中。您想要后者。)
发布于 2012-05-19 00:37:24
我个人喜欢git log -p。我展示了每次提交的不同之处,包括合并。
https://stackoverflow.com/questions/10655873
复制相似问题