在Git中的多个分支之间传播单个文件

时间:2018-09-23 18:43:26

标签: git

给定一个Git存储库中的单个文件,我如何最轻松地diff跨多个本地分支?我可以一次检查每个分支,然后将其与通用基准进行比较,但是我正在寻找一种方法,可以轻松地可视化5个或更多分支之间的差异。

1 个答案:

答案 0 :(得分:4)

  

给定一个Git存储库中的单个文件,我如何最轻松地在多个本地分支机构中diff

Git的git diff实际上一次只比较两件事。这两件事可以是整个提交/树,也可以是单个文件。

要命名提交,可以使用the gitrevisions documentation中描述的任何表达式,包括分支名称。如果命名提交,git diff将比较该提交的已保存快照(其树)。如果您命名文件,git diff会比较该文件。与the git diff documentation notes一样,当您要比较两个文件时,必须同时命名两个文件。 (这与git diff HEAD相反,后者将HEAD提交(或更确切地说是其树快照)与整个工作树进行比较。)

  

我可以一次签出每个分支,然后将其与通用基准进行比较...

无需检出文件以将其提供给git diff

git diff <revision>:<path> <revision>:<path>

命名Git所称的 blobs 中的两个,或多或少是文件的通用术语。 1 因此,如果您想比较文件的内容{提交README.txt中的{1}}与提交a123456README.txt的{​​1}:

fedcba9

如果您想要的提交(例如git diff a123456:README.txt fedcba9:README.txt )是分支a123456的尖端提交,则分支名称在此处起作用:

develop

但是,同样,比较严格地是成对进行的:左侧文件与右侧文件。

eftshift0 notes in a comment一样,如果文件在两次提交中都具有相同的 git diff develop:README.txt fedcba9:README.txt ,则可以让Git区分提交并告诉您一个文件:

path

如果要比较多个文件或整个子树,这特别有用:

git diff <commit1> <commit2> -- <path>

为您提供有关git diff $old $new -- dir/sub/ 中的每个文件的操作说明,以便将提交dir/sub/的内容转换为提交$old的内容,同时:

$new

告诉您有关两个文件都已更改的信息。


1 “实际上”是“更多”,因为Git将符号链接目标存储为blob内容。