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

Posted

技术标签:

【中文标题】Git:如何区分不同分支中的两个不同文件?【英文标题】:Git: How to diff two different files in different branches? 【发布时间】:2011-12-29 04:33:16 【问题描述】:

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

类似

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

我可以检查另一个文件,对其进行比较并恢复,但这是非常肮脏的解决方案。

【问题讨论】:

@EugenKonkov 这不是重复的,因为这个问题是询问如何区分不同分支中的 不同文件。链接的问题仅询问如何区分不同分支中的相同文件 【参考方案1】:
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 help diff 推断出这一点。顺便说一句,这些不必是冒号前面的分支名称,但可以是任何类型的提交引用(例如 SHA-1 值)。 重要提示:Windows 上的 Git 要求完整的 itemspec 为 unix 名称。即 branch1:full\path\to\foo.txt 失败,而 branch1:full/path/to/foo.txt 工作正常,full\path\to\foo.txt (无分支) 使用git difftool,然后删除branch2:,这将允许您编辑当前工作树中的文件(以带来来自branch1的更改) 在 linux 上试用 git 版本 1.8.3.1,只允许相对路径。【参考方案2】:

旁注:不需要完整路径,您可以以./ 开头以获得相对路径。有时会很方便。

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

【讨论】:

【参考方案3】:

题外话——见 cmets

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

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>

【讨论】:

OP 专门要求提供“不同的文件”。您的答案是比较两个不同分支中的同一个文件。 @EtienneMiret 你说得对,我错过了重要的一点。题外话。【参考方案4】:

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

如果名称相同或不同:

 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 分支中的文件。

您可以查看此回复:

Compare a file from two different branchs in Git

【讨论】:

【参考方案5】:

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

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

【讨论】:

这只是比较两个分支中的同一个文件;问题是关于两个分支中的两个不同文件。

以上是关于Git:如何区分不同分支中的两个不同文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Git 中查看不同分支的文件(没有更改)?

使用 GIT 如何将不同提交中的文件签出到新分支中? [复制]

如何提交两个分支的“git diff”?

git 对比两个分支差异

如何在git中合并具有不同目录层次结构的两个分支?

在 git 中使用 Windows 中具有相同名称但大小写不同的目录