给定一个Git存储库中的单个文件,我如何最轻松地diff
跨多个本地分支?我可以一次检查每个分支,然后将其与通用基准进行比较,但是我正在寻找一种方法,可以轻松地可视化5个或更多分支之间的差异。
答案 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}}与提交a123456
中README.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内容。