git - 在 Git 中跨多个分支区分单个文件

标签 git

给定 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 提交 a123456README.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/

相关文章:

linux - 在 Windows 7 机器上使用 git

git - Gradle-Git 插件使用

xcode - 是否应该将 XCSharedData 检查到 Xcode 项目的 Git Repo 中?

git - 如何从 Visual Studio 中删除/stash GitExtensions 工具栏?

git - Phpstorm git 尝试提交 workspace.xml

git - 艺术家能否在开源环境中真实地应对(分布式)版本控制?

git - 重新启用 Visual Studio Code GitHub 身份验证

Git:相当于 `--full-history` 和 `git bisect` 的 `git blame`

git - git stash 的预期用例是什么?

git - 我可以在 Git 别名中使用哪些字符?