git - Git 提交范围中的双点 ".."和三点 "..."有什么区别?

标签 git git-checkout git-diff git-log git-rev-list

一些 Git 命令采用提交范围,一种有效的语法是用两个点 .. 分隔两个提交名称,另一种语法使用三个点 ....

两者有什么区别?

最佳答案

在 Git 日志中使用提交范围

当您使用像 .. 这样的提交范围时和 ...git log ,它们的区别在于,对于分支A和B,

git log A..B

将向您显示所有 B 拥有而 A 没有的提交,而

git log A...B

将向您显示两者 A 有和 B 没有的提交,以及 B 有而 A 没有的提交,或其他换句话说,它将过滤掉 A 和 B 共享的所有提交,因此只显示他们共享的提交

使用维恩图和提交树进行可视化

这是 git log A..B 的可视化表示.分支 B 包含但 A 中不存在的提交是提交范围返回的内容,在维恩图中以红色突出显示,在提交树中以蓝色圈出:

"git log A..B" diagram Tree 1

这些是 git log A...B 的图表.请注意,命令不会返回由两个分支共享的提交:

"git log A...B" diagram Tree 2

制作三点提交范围 ...更有用

您可以将三点提交范围设为 ...使用 --left-right 在日志命令中更有用显示哪些提交属于哪个分支的选项:

$ git log --oneline --decorate --left-right --graph master...origin/master
< 1794bee (HEAD, master) Derp some more
> 6e6ce69 (origin/master, origin/HEAD) Add hello.txt

在上面的输出中,您将看到属于 master 的提交以 < 为前缀,而属于 origin/master 的提交以 > 为前缀.

在 Git Diff 中使用提交范围

有一天我可能会添加我自己的解释,说明提交范围如何与 git diff 一起使用, 但现在,您可能想查看 What are the differences between double-dot ".." and triple-dot "..." in Git diff commit ranges? .

另见

关于git - Git 提交范围中的双点 ".."和三点 "..."有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/462974/

相关文章:

Git checkout 'virtual'分支

Git:如何在不接触工作目录的情况下切换分支?

git - 如何查看工作目录和暂存索引之间的差异?

git - 分支名称中哪些字符是非法的?

git - git rebase没有应用提交

git pull 到 branch_1 并同时 merge 到当前分支

git - 查看未推送的 Git 提交

GitHub for Windows 表示即使差异为空,也有未提交的更改

git - 无法从 Virtualbox 内的 Ubuntu 服务器上的 git 中提取

git - 添加 Git Bash 别名