当我在进行 rebase -i 时,如何让 git 显示差异以便我可以重新编辑提交信息?

31

我一直使用git commit --verbose。在执行git rebase --interactive期间重新编辑提交消息时,是否有相应的选项/设置可使git向我显示差异信息?


7
我不认为如此。你可以在编辑器中自己完成,比如在vi中使用:r !git diff HEAD^或类似的命令。 - chirlu
@chirlu 哦,是啊,那是个有用的解决方法,谢谢你。 - Adam Monsen
@AdamMonsen,你如何在git rebase --interactive期间“重新措辞提交消息”?你是在初始屏幕上替换“pick”为“reword”,并直接提供新消息,还是将“pick”替换为“edit”,然后使用“git commit --amend”更改提交消息? - Vampire
@Vampire,好问题。我说的是前者:将“pick”更改为“reword”。但仅使用“edit”听起来像另一个很好的解决方法!除了明显的用户可见差异之外,“reword”和“edit”之间可能还有其他差异,我不知道。 - Adam Monsen
2个回答

13
根据您在评论中的回答,执行git diff HEAD^对您没有帮助,除非您只想重新编辑最后一次提交。
但在这种情况下,rebase是错误的工具。相反,您可以简单地使用git commit --amend --verbose而不更改索引,并编辑提交消息,以获得您所要求的差异视图。
如果您想要重写旧的或多个提交消息并具有差异视图,则只需使用edit部分而不是reword部分,然后在每个提交上使用git commit --amend --verbose而不更改索引中的代码。 reword应该只是使用edit的快捷方式,然后执行git commit --amend -m "new message"而不进行任何更改,这将仅更改提交消息。
您还可以将git commit --amend --verbosegit commit --verbose定义为别名,以便节省一些打字,例如,您可以简单地执行git cavgit c --amend

2
不要使用交互式变基中的 edit 命令,这会将您带到 shell 中,您必须键入 git commit --amend --verbose 来编辑提交,然后键入 git rebase --continue 才能继续。相反,您可以在相应的提交后添加一行 exec git commit --amend --verbose。这将直接将您放入该提交的编辑器中,并在您退出编辑器后继续变基。 - acran
啊,好的,不知怎么地从未考虑过 exec 部分。 - Vampire

8
展示差异:
git -c commit.verbose=true rebase --interactive

为了使所有提交都具有冗长输出而无需每次指定-c commit.verbose=true,请将以下内容添加到~/.gitconfig中:
[commit]
    verbose = true

参考文献:git-config 命令手册


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