什么是"显示从HEAD到ec9cb4106的所有日志"的命令?

jww*_*jww 1 git git-revision

我需要看到(1)从HEAD到ec9cb4106的日志消息或(2)从HEAD到ec9cb4106的汇总差异.该修正选择页面没有出现讨论它,我不能让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.
Run Code Online (Sandbox Code Playgroud)

我正在尝试,X .. Y因为这是git在汇总更新时显示的内容,并且可以将其提供给git diff.

如何查看(1)范围内的日志消息,或(2)范围的汇总差异?

tor*_*rek 5

格式化为答案(并且更关心订单):您希望git log ec9cb4106..HEAD在这里(根据评论),即包含可从中获取的提交HEAD但排除可从ec9cb4106(包括ec9cb4106其自身)到达的项目.

请注意,在两个点之前或之后没有空格.

双点表示法是包含和排除的简写.

通常,命令喜欢git loggit rev-list选择提交"with ancestry",因为它是:接受给定的提交并找到它的父级,父级的父级等,并访问每个这样的提交.这可能是一组非常大的提交,所以我们想要一些方法来修剪提交图中不感兴趣的部分.

对于这一点,git log并且git rev-list可以做集合操作.通常,命名多个提交会使您获得联合.例如,考虑如下图:

     C--D   <-- branch1
    /
A--B
    \
     E--F   <-- branch2
Run Code Online (Sandbox Code Playgroud)

命名branch1选择提交D,其中,通过分球,达到承诺C,BA,因此显示了这四个提交.

命名branch2选择提交F,到达提交E,BA,因此显示四个提交.

命名这两个分支同时选择DF,让你看到所有六个提交.请注意,您没有看到BA两次:首先完成选择,收集要显示的所有提交,然后对提交进行排序和显示(每次提交一次).

删除图形的某些部分,您可以告诉revision-walker从某个提交开始并删除该提交及其所有祖先.这个的外部语法是前缀帽子^:

git log branch1 ^branch2
Run Code Online (Sandbox Code Playgroud)

这表示"选择可以到达的所有内容branch1,然后丢弃可以从中获取的所有内容branch2".在这种情况下,那将选择D,C,B和A; 然后弃F,E,B和A. F和E是不是原来的设定,但是这不是一个问题:你可以减去离开那个不存在的提交.因此,不需要将否定的提交实际存在于正选择的提交的祖先集合中.

Git为这些提供了一套相当荒谬的大量语法,所以除此之外^X Y,你还可以编写--not X --not Y.两个人--not的原因是--not 坚持:--not X Y手段^X ^Y.第二个--not取消了第一个.

(两位点语法)X..Y^X Y(或等效地)(Y ^X)的缩写.除了--not持久化之外,使用较长语法时顺序无关紧要,但对于双点语法很重要.

请注意,特别git diff处理双点语法. 它没有在那里选择一系列提交.(相对较早地git diff检查文字字符串的C源代码..,在将参数传递给修订版解析代码之前删除它,如果它存在的话.)