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

偶尔善良 提交于 2019-12-24 12:07:14

【推荐】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。

笔记:

  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;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!