答案1
我想查阅 Git..
语法的文档
例如,在如下命令中使用
git log master..
他们叫双点 ..
和三点 ...
范围规格。
你还会看到它们被称为范围语法或者点语法。
搜索http://www.google.com对于其中任何一个术语,都会返回有用的结果。
简短的摘要
git log A..B (两个点)
虽然这种语法看起来像是从 A 到 B 的提交“范围”,但它实际上是一种简写
git log ^A B
:
- 显示从 B 可到达的所有提交;包括 B 本身
- 排除那些可从 A 到达的;A 本身被排除
因此给出以下历史记录(左边是最早的提交,右边是最新的提交):
*--*--*--A--*--*--*--B
git log A..B
将显示 A 右侧的所有提交。请注意
git log A..
相当于git log A..HEAD
。git log A...B(三个点)
git-rev-list 手册页将其描述为“对称差异”的特殊符号。
它相当于
git log A B --not $(git merge-base --all A B)
。用简单的英语来说,这意味着“所有可从 A 或 B 到达但不能从两者到达的提交。
详细摘要
双点
最常见的范围指定是双点语法。这基本上要求 Git 解析可从一个提交访问但不可从另一个提交访问的一系列提交。例如,假设您有一个提交历史记录,如下所示:
您想查看实验分支中尚未合并到主分支的内容。您可以让 Git 向您显示带有 master..experiment 的提交日志 - 这意味着“实验可访问但主分支无法访问的所有提交”。为了在这些示例中简洁明了,我将使用图表中提交对象的字母代替实际日志输出,其显示顺序如下:
$ git log master..experiment D C
另一方面,如果你想要看到相反的情况 - 所有在 master 中但不在 experiment 中的提交 - 你可以反转分支名称。experiment..master 向你显示 master 中无法从 experiment 访问的所有内容:
$ git log experiment..master F E
如果您想要使实验分支保持最新并预览您将要合并的内容,这将非常有用。此语法的另一个非常常见的用途是查看您将要推送到远程的内容:
$ git log origin/master..HEAD
此命令显示当前分支中所有不存在于 origin 远程 master 分支中的提交。如果您运行 git push 并且当前分支正在跟踪 origin/master,则 git log origin/master..HEAD 列出的提交将传输到服务器。您还可以省略语法的一侧,让 Git 假定 HEAD。例如,您可以通过输入 git log origin/master.. 获得与上例相同的结果 - 如果缺少一侧,Git 将替换为 HEAD。
多点
双点语法是一种很有用的简写;但也许你想指定两个以上的分支来指示你的修订,比如查看你当前所在分支中没有的几个分支中的提交。Git 允许你通过在你不想看到可到达提交的任何引用前使用 ^ 字符或 --not 来执行此操作。因此,这三个命令是等效的:
$ git log refA..refB $ git log ^refA refB $ git log refB --not refA
这很好,因为使用此语法,您可以在查询中指定两个以上的引用,而使用双点语法则无法做到这一点。例如,如果您想查看可从 refA 或 refB 访问但不能从 refC 访问的所有提交,您可以输入以下其中一个:
$ git log refA refB ^refC $ git log refA refB --not refC
这使得修订查询系统非常强大,可以帮助您了解分支中的内容。
三点
最后一个主要的范围选择语法是三点语法,它指定所有可以通过两个引用之一但不能同时通过它们到达的提交。回顾以下示例提交历史记录:
如果你想查看 master 或 experiment 中的内容,但不想查看任何常见参考资料,你可以运行
$ git log master...experiment F E D C
同样,这会为您提供正常的日志输出,但仅显示这四次提交的提交信息,按照传统的提交日期顺序出现。
在这种情况下,与 log 命令一起使用的常见开关是 --left-right,它显示每个提交位于范围的哪一侧。这有助于使数据更有用:
$ git log --left-right master...experiment < F < E > D > C
有了这些工具,您可以更轻松地让 Git 知道您想要检查哪些提交。