如何在不进入交互模式的情况下在每次提交之前进行差异化?

How to diff before each commit without going into interactive mode?

假设您执行 git status 并返回一个文件列表,您想要一个一个地检查这些文件,然后一个一个地提交它们。

或者您在目录上进行了 git 比较,并希望在检查后直接提交。如何用一个简单的技巧做到这一点?

2020 年更新:

经过一番折腾,我决定安装并使用 ydiff

执行 ydiff -s 在终端中并排显示差异。

不用费脑子在这里查看,不要介意我的旧答案:

https://github.com/ymattw/ydiff


[旧 ]

Git 提交之前的差异?

跳出框框思考的简单解决方案:

将此粘贴到您的 .bashrc 或 .zshrc 中:

gdiffy() { git diff && git add && git commit ; }

首先它会弹出一个差异,当你关闭它时,它会让你输入一个提交信息。

用法示例:

gdiffy config/database.yml

gdiffy .

如果您处于 GUI 环境中。您可以从控制台启动 "git gui".. 这将启动 window,其中左窗格将包含已更改文件的列表。选择其中任何一个,都会向您显示差异。 您可以通过单击文件名左侧的图标来添加文件,然后从相同的 window.

提交它

希望对您有所帮助。

注意:diff + commit 不起作用,因为您没有向索引添加任何内容。

如评论所述,git add -i or git add -p (--patch) 将为您提供差异视图,并可以添加或跳过每个差异块。
然后你可以提交修改后的索引。