在Git中,我怎么能在同一个分支(比如说主干)的两个不同的提交(不连续)之间比较同一个文件呢?
我正在寻找一个类似于 Visual SourceSafe (VSS) 或 Team Foundation Server (TFS) 中的对比功能。在Git中可以做到吗?
来自 [git-diff
][1] manpage。
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
[1]: https://www.kernel.org/pub/software/scm/git/docs/git-diff.html "Kernel.org版本的git-diff manpage"。
如果你已经配置了"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\"
下面是一个 perl 脚本,可以打印出 git 日志命令中给定文件的 git diff 命令。
如:
git log pom.xml | perl gldiff.pl 3 pom.xml
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
git diff 5cc287:pom.xml e8e420:pom.xml
git diff 3aa914:pom.xml 7476e1:pom.xml
git diff 422bfd:pom.xml f92ad8:pom.xml
然后可以在shell窗口会话中剪切N个粘贴,或者用管道传输到/bin/sh。
注释。
文件(本例中为pom.xml)必须在两个地方都同意(你可以用一个shell函数把它包起来,在两个地方提供同一个文件),或者把它作为一个shell脚本放在bin dir中
代码:
# 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;
}
如果你想在Windows上进行简单的视觉比较,比如你可以在VSS或TFS中得到,可以试试这个。
注意。 升级到Windows 10后,我已经失去了git上下文菜单选项。 不过,你可以使用'gitk' 或'gitk文件名'。 命令窗口来实现同样的目的。
一旦你调用了'Git History',Git的GUI工具就会启动,左上角的窗格中会出现文件的历史记录。 选择其中一个你想比较的版本。 然后右键点击第二个版本,并选择其中一个
Diff this -> 选定
或
差异选择-> 这个
彩色编码的差异将出现在左下角窗格中。