如何在同一分支上的兩個不一樣提交之間區分相同的文件?

在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;
}
相關文章
相關標籤/搜索