527

这经常发生在我身上:

我在一两天内同时进行了几个相关的更改,当需要提交时,我最终忘记了特定文件中的更改。(这只是一个个人 git repo,所以我可以在一次提交中进行多个更新。)

有没有办法预览我即将签入的本地文件和该文件的最后一次提交之间的更改?

就像是:

git diff --changed /myfile.txt

它会打印出如下内容:

line 23
  (last commit): var = 2+2
  (current):     var = myfunction() + 2

line 149
  (last commit): return var
  (current):     return var / 7

这样,我可以快速查看自上次签入以来我在该文件中所做的事情。

4

10 回答 10

869

如果您想查看尚未git add编辑的内容:

git diff myfile.txt

或者如果您想查看已添加的更改

git diff --cached myfile.txt
于 2012-04-06T06:04:54.893 回答
76
git diff HEAD file

将显示您从上次提交添加到工作树的更改。将显示所有更改(已上演或未上演)。

于 2012-04-06T09:13:12.520 回答
23

要检查本地差异:

git diff myfile.txt

或者您可以使用差异工具(以防您想恢复某些更改):

git difftool myfile.txt

git difftool更有效地使用,请安装和使用您最喜欢的 GUI 工具,例如 Meld、DiffMerge 或 OpenDiff。

注意:您也可以使用.(而不是文件名)查看当前目录更改。

为了检查每行的更改,请使用:git blame这将显示在哪个提交中提交了哪一行。


要在提交之前查看实际文件(master您的分支在哪里),请运行:

git show master:path/my_file
于 2015-03-09T22:18:50.367 回答
18

您是否尝试过-v(或--verbose)选项git commit?它在消息编辑器中添加了提交的差异。

于 2012-04-06T06:07:32.760 回答
18

如果要将文件与更迂腐的最后一次提交进行比较,请考虑另一种技术:

git diff master myfile.txt

这种技术的优点是您还可以与倒数第二次提交进行比较:

git diff master^ myfile.txt

和之前的一个:

git diff master^^ myfile.txt

如果您不在 master 分支上,您也可以用 '~' 代替插入符号 '^' 字符和 'you branch name' 代替 'master'。

于 2016-12-12T17:03:15.277 回答
15

我认为这是保证 GUI 的完美用例。- 虽然我完全理解它也可以在命令行中很好地实现。

就个人而言,我的每一次提交都是从 git-gui 进行的。如果这样做有意义的话,我可以在其中使用单独的块/行进行多个原子提交。

Gut Gui 可以在格式良好的彩色界面中查看差异,相当轻巧。看起来这也是你应该检查的东西。

于 2012-04-06T06:59:25.337 回答
14

在 macOS 上,进入 git 根目录并输入git diff *

于 2017-06-06T12:20:03.780 回答
6

除了使用专用的提交 GUI 之外,我发现的最好方法是使用git difftool -d- 这会在目录比较模式下打开您的差异工具,将 HEAD 与当前的脏文件夹进行比较。

于 2015-06-29T08:46:56.823 回答
4
git difftool -d HEAD filename.txt

这显示了在终端中使用 VI 狭缝窗口的比较。

于 2018-02-27T10:12:07.037 回答
0

可以使用 diff 来完成git diff(如果您想查看所有修改文件的差异,则后跟文件名或什么都没有)。但是如果你已经做了类似的事情git add *,你必须先撤消git restore --staged .

于 2021-03-05T15:10:21.370 回答