如何在同一分支上的两个不同的提交之间区分同一个文件?

在git上,我怎么能比较相同的分支(主例如)两个不同的提交(不连续)相同的文件?

我正在寻找一个像VSS或TFS中的比较function,可以在Git中吗?

git-diff页:

 git diff [--options] <commit> <commit> [--] [<path>...] 

例如,要看到现在和两个提交之间的文件“main.c”的差异,这里有三个等同的命令:

 $ git diff HEAD^^ HEAD main.c $ git diff HEAD^^..HEAD -- main.c $ git diff HEAD~2 HEAD -- main.c 

您还可以在两个不同的修订版本中比较两个不同的文件,如下所示:

git diff < revision_1 >:< file_1 > < revision_2 >:< file_2 >

如果您已经configuration了可以使用的“difftool”

 git difftool revision_1:file_1 revision_2:file_2 

示例:比较上一次提交的文件和之前在同一分支上的提交:假设如果您位于项目的根文件夹

 $git difftool HEAD:src/main/java/com.xyz.test/MyApp.java HEAD^:src/main/java/com.xyz.test/MyApp.java 

您应该在〜/ .gitconfig或project / .git / config文件中有以下条目。 安装p4merge [这是我的首选差异和合并工具]

 [merge] tool = p4merge keepBackup = false [diff] tool = p4merge keepBackup = false [difftool "p4merge"] path = C:/Program Files (x86)/Perforce/p4merge.exe [mergetool] keepBackup = false [difftool] keepBackup = false [mergetool "p4merge"] path = C:/Program Files (x86)/Perforce/p4merge.exe cmd = p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\" 

如果您希望在提交提交的基础上查看两个提交之间文件的所有更改,则也可以这样做

git log -u $start_commit..$end_commit -- path/to/file

检查$ git log ,然后复制2个不同提交的SHA id,然后用这些id运行git diff命令,例如:

 $ git diff (sha-id-one) (sha-id-two) 

这是一个perl脚本,它可以打印出git log命令中给定文件的git diff命令。

例如

 git log pom.xml | perl gldiff.pl 3 pom.xml 

产量:

 git diff 5cc287:pom.xml e8e420:pom.xml git diff 3aa914:pom.xml 7476e1:pom.xml git diff 422bfd:pom.xml f92ad8:pom.xml 

然后可以剪切N粘贴在shell窗口会话或pipe道到/ bin / sh。

笔记:

  1. 数字(在这种情况下为3)指定要打印的行数
  2. 这个文件(在这种情况下是pom.xml)必须在两个地方都一致(你可以把它包装在一个shell函数中,在两个地方提供相同的文件),或者把它作为一个shell脚本放到一个bin目录中

码:

 # gldiff.pl use strict; my $max = shift; my $file = shift; die "not a number" unless $max =~ m/\d+/; die "not a file" unless -f $file; my $count; my @lines; while (<>) { chomp; next unless s/^commit\s+(.*)//; my $commit = $1; push @lines, sprintf "%s:%s", substr($commit,0,6),$file; if (@lines == 2) { printf "git diff %s %s\n", @lines; @lines = (); } last if ++$count >= $max *2; } 

如果您想使用@mipadi指定的方法对多个文件进行比较,请执行以下操作:

例如HEAD和你的master之间的差异,find所有.coffee文件:

 git diff master..HEAD -- `find your_search_folder/ -name '*.coffee'` 

这将recursionsearchyour_search_folder/所有.coffee文件,并在它们与其master版本之间进行.coffee

只是另一种使用Git的迷人的方式…

 git difftool HEAD HEAD@{N} /PATH/FILE.ext 

如果你有几个文件或目录,并想比较非连续的提交,你可以这样做:

做一个时间分支

 git checkout -b revision 

倒回到第一个提交目标

 git reset --hard <commit_target> 

樱桃采摘那些提交感兴趣

 git cherry-pick <commit_interested> ... 

应用差异

 git diff <commit-target>^ 

当你完成

 git branch -D revision 

如果你想在Windows上进行一个简单的视觉比较,例如你可以在VSS或TFS中获得,可以试试这个:

  • 右键单击文件资源pipe理器中的文件
  • select“Git History”

Git GUI工具将启动,并在左上方的窗格中显示该文件的历史logging。 select您想要比较的版本之一。 然后右键单击第二个版本并select其中一个

比较这个 – >选中

要么

差异select – >这个

颜色编码的差异将出现在左下方的窗格中。