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

Git:如何在不同的分支中区分两个不同的文件?,git,git-diff,Git,Git Diff,我在不同的分支中有两个不同的文件。 如何在一个命令中区分它们 差不多 # git diff branch1/foo.txt branch2/foo-another.txt 我可以签出另一个文件,对其进行区分并进行恢复,但这是一个相当肮脏的解决方案 git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt 也可以使用相对路径: git diff branch1:./relative/path/to/fo

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

差不多

# git diff branch1/foo.txt branch2/foo-another.txt
我可以签出另一个文件,对其进行区分并进行恢复,但这是一个相当肮脏的解决方案

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

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

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

有许多方法可以比较来自两个不同分支的文件。例如:

  • 如果名称相同或不同:

     git diff branch1:file branch2:file
    
    示例:

  • 仅当名称相同且您希望将当前工作目录与某个分支进行比较时:

    git diff ..someBranch path/to/file
    
    示例:

    git diff ..branch2 full/path/to/foo.txt
    
    在本例中,您将实际分支中的文件与 主分支中的文件

您可以检查此响应:

离题回答——见评论

为了便于添加,我发现它是一种非常简单的语法:

git diff <branch1> <branch2> <filepath>
git-diff
也适用于相对参照,例如:

# compare the previous committed state from HEAD with the state branch1 was 3 commits ago
git diff HEAD^ <branch1>~3 <filepath>
#将HEAD之前提交的状态与branch1在3次提交之前的状态进行比较
吉特差异头^~3

您可以指定要应用于的
git diff
的起点和范围。范围用
符号表示。
符号表示

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

令人惊叹的!我当然无法从git help diff中推断出这一点。顺便说一句,这些不必是冒号前面的分支名称,但可以是任何类型的提交引用(例如SHA-1值)。重要说明:windows上的Git要求完整的itemspec是unix名称。i、 e.branch1:full\path\to\foo.txt失败,而branch1:full/path/to/foo.txt工作正常,full\path\to\foo.txt(无分支)使用
git difftool
,然后删除
branch2:
,这将允许您编辑当前工作树中的文件(以从
branch1
进行更改)在git版本为1.8.3.1的linux上尝试过,只允许相对路径。@EugenKonkov这不是重复,因为这个问题是问如何区分不同分支中的不同文件。链接的问题只询问如何在不同的分支中区分相同的文件。OP特别要求“不同的文件”。您的答案是比较两个不同分支中的同一文件。@EtienneMiret您完全正确,我忽略了重要的一点。非主题答案。这只是比较两个分支中的同一文件;问题是关于两个分支中的两个不同文件。
branch1=somebranch
branch2=someotherbranch
git diff ${branch1}..${branch2} -- file_path