"show me all logs from HEAD to ec9cb4106" 的命令是什么?
What is the command for "show me all logs from HEAD to ec9cb4106"?
我需要查看 (1) 从 HEAD 到 ec9cb4106 的日志消息或 (2) 从 HEAD 到 ec9cb4106 的汇总差异。 revision selection 页面似乎没有讨论它,我无法让 git 接受明显的选择:
$ git log HEAD .. ec9cb4106
fatal: ec9cb4106: no such path in the working tree.
Use 'git <command> -- <path>...' to specify paths that do not exist locally.
$ git diff HEAD .. ec9cb4106
fatal: ec9cb4106: no such path in the working tree.
Use 'git <command> -- <path>...' to specify paths that do not exist locally.
我正在尝试 X .. Y
,因为这是 git 在总结更新时显示的内容,并且可以将其提供给 git diff
。
如何查看 (1) 范围内的日志消息,或 (2) 范围的汇总差异?
git lo HEAD..ec9cb4106
或 git log ^HEAD ec9cb4106
列出可从 ec9cb4106 访问的所有提交,不包括可从 HEAD 访问的提交。如果 HEAD 位于 ec9cb4106 之前或仅指向 ex9cb4106,则输出为空。您可能需要 git log ec9cb4106..HEAD
或 git log ^ec9cb4106 HEAD
.git diff HEAD ec9cb4106
或 git diff HEAD..ec9cb4106
或 git diff ec9cb4106 HEAD
或 git diff ec9cb4106..HEAD
或 git diff ec9cb4106
(HEAD 可以省略这种情况)都是一样的。
格式化为答案(并且更关心顺序):你想要 git log ec9cb4106..HEAD
这里(根据评论),即包括可从 HEAD
到达的提交但排除可从 [=14 到达的项目=](包括 ec9cb4106
本身)。
注意两个点前后没有空格。
two-dot 表示法是 shorthand for inclusion-and-exclusion。
一般来说,像 git log
和 git rev-list
select 这样的命令是一个提交 "with ancestry",就像这样:接受给定的提交并找到它的 parent (s)、parents' parents 等等,并访问每个这样的提交。这可能是一组非常大的提交,因此我们需要一些方法来删除提交图中不感兴趣的部分。
为此,git log
和git rev-list
可以进行集合运算。一般来说,命名多个提交会让你成为一个联合。例如,考虑这样的图表:
C--D <-- branch1
/
A--B
\
E--F <-- branch2
命名 branch1
select 提交 D
,它通过 back-pointers 到达提交 C
、B
和 A
,因此向您展示了这四个提交。
命名 branch2
selects 提交 F
,它到达提交 E
、B
和 A
,因此向您展示那些 四次提交。
命名 both 分支 selects both D
and F
,所以你看到所有六个提交。请注意,您不会两次看到B
和A
:selection首先完成,收集所有要显示的提交,然后提交被排序并显示(每个一次)。
要删除 图表的某些部分,您可以告诉 revision-walker 从某个提交开始并删除该提交及其所有祖先。这个的外部语法是前缀 hat ^
:
git log branch1 ^branch2
这表示 "select everything reachable from branch1
, then discard everything reachable from branch2
"。在这种情况下,那就是 select D、C、B 和 A;然后丢弃 F、E、B 和 A。F 和 E 不是 in 原始集合,但这不是问题:您可以减去不存在的提交。因此,否定的提交实际上不需要在 positively-selected 提交的祖先集合中。
Git 为这些提供了相当多的语法集,所以除了 ^X Y
,你还可以写 --not X --not Y
。两个--not
的原因是--not
坚持:--not X Y
表示^X ^Y
。第二个 --not
抵消了第一个。
two-dot 语法,X..Y
,对于 ^X Y
是 shorthand(或等效的(Y ^X
)。除了 --not
坚持, 使用较长的语法时顺序无关紧要,但对于 two-dot 语法很重要。
请注意 git diff
对 two-dot 语法进行特殊处理。 它不会 select 那里的提交范围。 (git diff
的 C 源代码相对较早地检查文字字符串 ..
,如果存在则将其删除,然后再将参数传递给修订解析代码。)
我需要查看 (1) 从 HEAD 到 ec9cb4106 的日志消息或 (2) 从 HEAD 到 ec9cb4106 的汇总差异。 revision selection 页面似乎没有讨论它,我无法让 git 接受明显的选择:
$ git log HEAD .. ec9cb4106
fatal: ec9cb4106: no such path in the working tree.
Use 'git <command> -- <path>...' to specify paths that do not exist locally.
$ git diff HEAD .. ec9cb4106
fatal: ec9cb4106: no such path in the working tree.
Use 'git <command> -- <path>...' to specify paths that do not exist locally.
我正在尝试 X .. Y
,因为这是 git 在总结更新时显示的内容,并且可以将其提供给 git diff
。
如何查看 (1) 范围内的日志消息,或 (2) 范围的汇总差异?
git lo HEAD..ec9cb4106
或 git log ^HEAD ec9cb4106
列出可从 ec9cb4106 访问的所有提交,不包括可从 HEAD 访问的提交。如果 HEAD 位于 ec9cb4106 之前或仅指向 ex9cb4106,则输出为空。您可能需要 git log ec9cb4106..HEAD
或 git log ^ec9cb4106 HEAD
.git diff HEAD ec9cb4106
或 git diff HEAD..ec9cb4106
或 git diff ec9cb4106 HEAD
或 git diff ec9cb4106..HEAD
或 git diff ec9cb4106
(HEAD 可以省略这种情况)都是一样的。
格式化为答案(并且更关心顺序):你想要 git log ec9cb4106..HEAD
这里(根据评论),即包括可从 HEAD
到达的提交但排除可从 [=14 到达的项目=](包括 ec9cb4106
本身)。
注意两个点前后没有空格。
two-dot 表示法是 shorthand for inclusion-and-exclusion。
一般来说,像 git log
和 git rev-list
select 这样的命令是一个提交 "with ancestry",就像这样:接受给定的提交并找到它的 parent (s)、parents' parents 等等,并访问每个这样的提交。这可能是一组非常大的提交,因此我们需要一些方法来删除提交图中不感兴趣的部分。
为此,git log
和git rev-list
可以进行集合运算。一般来说,命名多个提交会让你成为一个联合。例如,考虑这样的图表:
C--D <-- branch1
/
A--B
\
E--F <-- branch2
命名 branch1
select 提交 D
,它通过 back-pointers 到达提交 C
、B
和 A
,因此向您展示了这四个提交。
命名 branch2
selects 提交 F
,它到达提交 E
、B
和 A
,因此向您展示那些 四次提交。
命名 both 分支 selects both D
and F
,所以你看到所有六个提交。请注意,您不会两次看到B
和A
:selection首先完成,收集所有要显示的提交,然后提交被排序并显示(每个一次)。
要删除 图表的某些部分,您可以告诉 revision-walker 从某个提交开始并删除该提交及其所有祖先。这个的外部语法是前缀 hat ^
:
git log branch1 ^branch2
这表示 "select everything reachable from branch1
, then discard everything reachable from branch2
"。在这种情况下,那就是 select D、C、B 和 A;然后丢弃 F、E、B 和 A。F 和 E 不是 in 原始集合,但这不是问题:您可以减去不存在的提交。因此,否定的提交实际上不需要在 positively-selected 提交的祖先集合中。
Git 为这些提供了相当多的语法集,所以除了 ^X Y
,你还可以写 --not X --not Y
。两个--not
的原因是--not
坚持:--not X Y
表示^X ^Y
。第二个 --not
抵消了第一个。
two-dot 语法,X..Y
,对于 ^X Y
是 shorthand(或等效的(Y ^X
)。除了 --not
坚持, 使用较长的语法时顺序无关紧要,但对于 two-dot 语法很重要。
请注意 git diff
对 two-dot 语法进行特殊处理。 它不会 select 那里的提交范围。 (git diff
的 C 源代码相对较早地检查文字字符串 ..
,如果存在则将其删除,然后再将参数传递给修订解析代码。)