Git 查看从分支开始的所有提交(仅查看当前分支)

Git 查看从分支开始的所有提交(仅查看当前分支),git,Git,从这里到我们创建这个分支的那一刻,是否存在一种“git log”当前分支的所有提交的方法?一种“$git日志--当前分支…” 看这个图表,我的意思是相同的结果 $ git log --oneline --graph 7050d07..HEAD (请注意,git log 7050d07..HEAD“表示“git log HEAD^7050d07,其中前缀^类似于短期的--not。这可能还没有意义;请参见下文,并研究和的文档。这是理解下面两个git别名的关键。) Git没有“何时创建分支”的概念。

从这里到我们创建这个分支的那一刻,是否存在一种“git log”当前分支的所有提交的方法?一种“$git日志--当前分支…”

看这个图表,我的意思是相同的结果

$ git log --oneline --graph 7050d07..HEAD
(请注意,
git log 7050d07..HEAD
“表示“
git log HEAD^7050d07
,其中前缀
^
类似于短期的
--not
。这可能还没有意义;请参见下文,并研究和的文档。这是理解下面两个git别名的关键。)

Git没有“何时创建分支”的概念。分支名称只是一个移动的标签;更具体地说,本地分支是在该分支上添加新提交时自动移动的名称。所以你不可能完全得到你想要的,但是你可能会得到你想要的

Git确实有我所说的“分支结构”:一段提交图。在我看来,这里需要的是一个
git日志
,它在分支结构有一个fork时停止,即在有两个父级的第一次提交之前停止。但不清楚这是否真的是你想要的。例如,考虑这个图表:

               *
              / \
... o--o--*--*   *--*   <-- br1
        \     \ /
         \     *
          \
           o--o   <-- br2
(第二个
--not
通常是不必要的:它反转了第一个
--not
的效果,因此,例如,标记名参数可以添加更多的提交,而不是减去提交。此外,名称
ltf
来自我的一个模糊想法,不是很有意义,但它仍然在我的
~/.gitconfig
中。)

这里的想法是为每个ref使用
,以生成所有本地分支名称(简写形式),如果我们在一个分支上,则丢弃当前分支(
grep-v
,名称来自
git symbolic ref
),并使用这些分支名称排除其他分支上的任何提交

(所有附加参数都像往常一样附加到别名上,因此
git ltf--oneline--graph
在这里起作用。)

如果确实要排除从第一次合并(两个或多个父级)提交开始并向后工作的所有提交,这里的技巧是使用
git rev list
--merges
--min parents=2
(这些是相同的选择器)来定位它:

git rev-list --merges -1 HEAD
这是要随
--not
一起提供的提交ID(或前缀
^
,但如果没有这样的版本,则会出现错误,因此
--not
在这里更优越):

(同样,第二个
--not
与第一个
--not
的效果相反,就像上面的
ltf
别名一样。)因此,使用此别名,
git ltm--graph--oneline
将产生:

* b137094 Alter this stuff
* b2046b6 Change that stuff
* e6fd3b8 Hello world
* 31f3922 Lol
* d44552a ROTFL

(这里的
--图
肯定很无聊,因为没有叉子。)

谢谢“$git log HEAD--not$(git rev list--merges-1 HEAD)”是的,但是如果
HEAD
后面的历史中没有合并,第二个会表现不正确(因为
。HEAD
表示
HEAD..HEAD
是空的)。
git rev-list --merges -1 HEAD
[alias]
    ltm = !git log HEAD --not $(git rev-list --merges -1 HEAD) --not
* b137094 Alter this stuff
* b2046b6 Change that stuff
* e6fd3b8 Hello world
* 31f3922 Lol
* d44552a ROTFL