如何在提交之前在git中查看文件差异

Sau*_*oss 411 git git-diff

这经常发生在我身上:

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

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

就像是:

git diff --changed /myfile.txt
Run Code Online (Sandbox Code Playgroud)

它会打印出如下内容:

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

line 149
  (last commit): return var
  (current):     return var / 7
Run Code Online (Sandbox Code Playgroud)

通过这种方式,我可以快速查看自上次签入以来我在该文件中所做的工作.

Amb*_*ber 677

如果你想看看你还没有git add编辑过:

git diff myfile.txt
Run Code Online (Sandbox Code Playgroud)

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

git diff --cached myfile.txt
Run Code Online (Sandbox Code Playgroud)

  • 看看`git add -p`.检查每个更改,有选择地批准更改到阶段,如果您改变主意,随时中止,甚至内联编辑块.没有它我永远不会'git add`. (16认同)
  • @Kick尝试按`q` (3认同)
  • 如何退出文件? (2认同)

oua*_*uah 62

git diff HEAD file
Run Code Online (Sandbox Code Playgroud)

将显示您在上次提交时添加到工作树中的更改.将显示所有更改(暂存或未暂存).


ken*_*orb 16

要检查本地差异:

git diff myfile.txt
Run Code Online (Sandbox Code Playgroud)

或者您可以使用diff工具(如果您想要还原某些更改):

git difftool myfile.txt
Run Code Online (Sandbox Code Playgroud)

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

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

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


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

git show master:path/my_file
Run Code Online (Sandbox Code Playgroud)


vha*_*lac 15

你有尝试-v(或--verbose)选项git commit吗?它在消息编辑器中添加了提交的差异.


ani*_*bet 14

另一种考虑是否要将文件与最后提交进行比较的技术:

git diff master myfile.txt
Run Code Online (Sandbox Code Playgroud)

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

git diff master^ myfile.txt
Run Code Online (Sandbox Code Playgroud)

那之前的一个:

git diff master^^ myfile.txt
Run Code Online (Sandbox Code Playgroud)

如果您不在主分支上,也可以用'〜'代替插入符号'^'和'分支名'代表'master'.


Lak*_*sad 13

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

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

Gut Gui可以在格式良好的彩色界面中查看差异,相当清淡.看起来这也是你应该结账的东西.

  • 我同意 - 有很多选项,它使用命令行更快,更有意义.但是,预览更改不是其中之一. (2认同)

cat*_*ore 10

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


Vit*_*lyB 5

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