给定 Git 存储库中的单个文件,我怎样才能最轻松地diff
跨多个本地分支?我可以一次检查每个分支并将其与公共(public)基线进行比较,但我正在寻找一种方法来轻松可视化 5 个或更多分支之间的差异。
最佳答案
Given a single file in a Git repo, how can I most easily
diff
across multiple local branches?
Git 的 git diff
实际上一次只比较两件事。这两件事可以是整个提交/树,也可以是单个文件。
要命名提交,您可以使用 the gitrevisions documentation 中描述的任何表达式,包括分支名称。如果您命名一个提交,git diff
会比较该提交的保存快照(它的树)。如果您命名一个文件,git diff
会比较该文件。作为 the git diff
documentation notes ,当你想比较两个文件时,你必须命名这两个文件。 (这与例如 git diff HEAD
形成对比,它将 HEAD
提交——或者更确切地说,它的树快照——与整个工作树进行比较。)
I could check out each branch one at a time and diff it against a common baseline ...
无需 check out 文件即可将其提供给 git diff
:
git diff <revision>:<path> <revision>:<path>
命名了 Git 称为 blobs 的两个名称,后者或多或少是文件的通用术语。1 因此,如果您想比较文件的内容 README.txt
提交 a123456
到 README.txt
提交 fedcba9
:
git diff a123456:README.txt fedcba9:README.txt
如果您想要的提交(例如,a123456
)是分支 develop
的尖端提交,则分支名称在这里:
git diff develop:README.txt fedcba9:README.txt
但是,再次强调,比较是严格成对的:左侧文件与右侧文件。
作为 eftshift0 notes in a comment ,如果文件在两次提交中具有相同的路径
,您可以让 Git 比较提交并告诉您关于一个文件的信息:
git diff <commit1> <commit2> -- <path>
如果您想比较多个文件或整个子树,这将特别有用:
git diff $old $new -- dir/sub/
为您提供有关如何处理 dir/sub/
中的每个 文件的说明,以便将提交 $old
的内容转换为提交 $new
的内容,同时:
git diff $old $new -- $file1 $file2
如果两个文件都更改了,则告诉您两个文件的更改。
1“更多”,真的,例如,因为 Git 将符号链接(symbolic link)目标存储为 blob 内容。
关于git - 在 Git 中跨多个分支区分单个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52469176/