【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
在Git中,我如何比较同一分支(例如master)上两个不同提交(不连续)之间的相同文件?
我正在搜索Visual SourceSafe (VSS)或Team Foundation Server (TFS)中的比较功能。 Git有可能吗?
#1楼
检查$ git log
,然后复制2个不同提交的SHA id,然后使用这些id运行git diff
命令,例如:
$ git diff (sha-id-one) (sha-id-two)
#2楼
另一种使用git真棒的方法......
git difftool HEAD HEAD@{N} /PATH/FILE.ext
#3楼
如果您有多个文件或目录并想要比较非连续提交,则可以执行以下操作:
做一个时间分支
git checkout -b revision
回退到第一个提交目标
git reset --hard <commit_target>
对那些承诺感兴趣的樱桃采摘
git cherry-pick <commit_interested> ...
应用差异
git diff <commit-target>^
当你完成
git branch -D revision
#4楼
如果要使用多个文件进行差异,请使用@mipadi指定的方法:
例如HEAD
和你的master
之间的差异,找到所有.coffee
文件:
git diff master..HEAD -- `find your_search_folder/ -name '*.coffee'`
这将递归搜索your_search_folder/
所有.coffee
文件,并在它们和master
版本之间进行.coffee
。
#5楼
这是一个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
然后可以将其粘贴在shell窗口会话中或者通过管道传送到/ bin / sh。
笔记:
- 数字(本例中为3)指定要打印的行数
- 文件(在这种情况下是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;
}
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3146577