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

在Git中,我如何比较同一分支(例如master)上两个不一样提交(不连续)之间的相同文件? git

我正在搜索Visual SourceSafe (VSS)或Team Foundation Server (TFS)中的比较功能。 Git有可能吗? shell


#1楼

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

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

#2楼

另外一种使用git真棒的方法...... 函数

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

#3楼

若是您有多个文件或目录并想要比较非连续提交,则能够执行如下操做: spa

作一个时间分支 rest

git checkout -b revision

回退到第一个提交目标 code

git reset --hard <commit_target>

对那些承诺感兴趣的樱桃采摘 xml

git cherry-pick <commit_interested> ...

应用差别 递归

git diff <commit-target>^

当你完成 ip

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。

笔记:

  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;
}
相关文章
相关标签/搜索