1

我经常使用 git rebase --interactive 来清理历史记录。它发生了合并冲突,或者即使没有冲突,仍然存在合并。即使我只更改了提交的顺序,压缩了它们等,我总是有点害怕某些事情发生了变化。

我曾经保留我的工作树的备份副本以粘贴到新的树上。然后我查看了 gitg 中的提交窗口,看看是否一切都一样。不过这很痛苦,我停止制作备份副本。

接下来我做了一个备份分支,我发现它git diff backup-branch有效。

现在我尝试了:(因为我也想停止制作备份分支)

git --diff HEAD ORIG_HEAD

但这表明我发生了变化,当我查看工作目录中的文件时,它看起来并没有改变。

这种情况下正确的命令是什么?

4

2 回答 2

2

在这种情况下,交互式变基从结帐开始,出于某种原因,在结帐后设置了 ORIG_HEAD 。您实际上想在 rebase 进行结帐之前与作为 HEAD 的提交进行比较。您可以在 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}

除非交互式变基实际上更改了代码中的某些内容,否则您不会期望任何输出。

如果您可以从 reflog 中提取该条目,那就太好了,但是除了获取 ORIG_HEAD 指向的提交(git rev-parse ORIG_HEAD带线。您可以编写一个脚本来执行此操作,但手动找到它并不难。

(你可能认为 ORIG_HEAD^ 会给你你想要的,但这会给你提交历史中 ORIG_HEAD 之前的提交,而不是在你的本地 reflog 中。你想要后者。)

于 2012-05-18T18:36:07.583 回答
0

我个人喜欢git log -p。我展示了每个提交的差异,包括合并。

于 2012-05-18T16:37:23.763 回答