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:如何区分不同分支中的两个不同文件?的主要内容,如果未能解决你的问题,请参考以下文章