Git:如何区分不同分支中的两个不同文件?


170

我在不同的分支中有两个不同的文件。如何在一个命令中区分它们?

就像是

# git diff branch1/foo.txt branch2/foo-another.txt

我可以签出另一个文件,将其差异化并还原,但这是非常肮脏的解决方案。


3
@EugenKonkov这不是重复的,因为此问题询问如何在不同分支中区分不同文件。链接的问题仅询问如何在不同分支中区分同一文件
史蒂夫(Steve)

Answers:


214
git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt

您还可以使用相对路径:

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt

9
太棒了!我当然不能从中推断出这一点git help diff。顺便说一下,那些不必是冒号前面的分支名称,而可以是任何类型的提交引用(例如SHA-1值)。
史蒂夫·乔根森

3
重要说明:Windows上的Git要求完整的itemspec是Unix名称。即branch1:full \ path \ to \ foo.txt失败,而branch1:full / path / to / foo.txt正常工作,full \ path \ to \ foo.txt(无分支)工作
Eris

使用git difftool,然后放下branch2:和,这将允许您编辑当前工作树中的文件(以branch1
继承

在git版本1.8.3.1的Linux上尝试过,仅允许相对路径。
Sola Yang

21

旁注:不需要完整路径,可以从./相对路径开始。有时可能很方便。

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt

2

比较两个不同分支的文件有很多方法。例如:

  • 如果名称相同或不同:

     git diff branch1:file branch2:file
    

    例:

     git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt
    
  • 仅当名称相同并且您要将当前工作目录与某个分支进行比较时:

    git diff ..someBranch path/to/file
    

    例:

    git diff ..branch2 full/path/to/foo.txt
    

    在此示例中,您将实际分支中的文件与master分支中的文件进行比较。

您可以检查以下响应:

比较来自Git中两个不同分支的文件


1

题外答案-查看评论

只是为了添加它,我发现它的语法很简单:

git diff <branch1> <branch2> <filepath>

也可以使用相对引用,例如:

# compare the previous committed state from HEAD with the state branch1 was 3 commits ago
git diff HEAD^ <branch1>~3 <filepath>

1
OP特别要求提供“不同的文件”。您的答案是关于比较两个不同分支中的同一文件。
Etienne Miret

@EtienneMiret您说得对,我错过了这一要点。题外答案。
RomainValeri

-1

您可以指定git diff要应用的开始和范围。该范围用..符号表示。

branch1=somebranch
branch2=someotherbranch
git diff ${branch1}..${branch2} -- file_path

这仅是比较两个分支中的同一文件。问题是关于两个分支中的两个不同文件。
皮兰
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.