从现在到我们创建这个分支的那一刻,存在一种“git log”所有当前分支的提交方式?一种“$ git log --current-branch ......”
* b137094 Alter this stuff
* b2046b6 Change that stuff
* e6fd3b8 Hello world
* 31f3922 Lol
* d44552a ROTFL
* 7050d07 Hey you the rock steady crew
|\
| * d8a9fcf Queens
| |\
* | | c1d6a37 Bluvertigo
* | | 83a7565 Luciano Ligabue
* | | cfe48b0 Vasco Rossi
|\ \ \
. . . .
. . . .
观看此图表,我的意思是与
相同的结果$ git log --oneline --graph 7050d07..HEAD
答案 0 :(得分:2)
(请注意,git log 7050d07..HEAD
“表示”git log HEAD ^7050d07
,前缀^
就像短期--not
。这可能没有意义;请参阅下文,研究gitrevisions
和git rev-list
的文档。这是理解下面两个git别名的关键。)
Git没有“创建分支时”的概念。分支名称只是一个移动的标签;更具体地说,本地分支是在该分支上添加新提交时自动移动的名称。所以你无法得到你所要求的,但你可能得到你想要的东西。
Git确实有我称之为“分支结构”的东西:提交图的一部分。它看起来像你想要的是git log
,当分支结构有一个分支时停止,即在第一个具有两个父项的提交之前停止。但目前尚不清楚这是否真的 你想要什么。例如,请考虑以下图表:
*
/ \
... o--o--*--* *--* <-- br1
\ \ /
\ *
\
o--o <-- br2
其中br1
和br2
是实际的分支标签。分支br1
中有一个fork-and-join,您可能希望git log
显示所有(但仅限于)*
- ed提交。另一方面,也许您只想要单端*
提交。
我有一个别名,使用分支标签和git for-each-ref
:
[alias]
ltf = !git log HEAD --not $(git for-each-ref \
--format='%(refname:short)' refs/heads/ | \
grep -v "^$(git symbolic-ref -q --short HEAD)$") --not
(第二个--not
通常是不必要的:它会反转第一个--not
的效果,这样,例如,tag-name参数可以添加更多提交,而不是减去提交。名字ltf
来自我所拥有的一个模糊的想法,并且不是很有意义,但它仍然存在于我的~/.gitconfig
...)
这里的想法是使用for-each-ref
生成所有本地分支名称(以简短形式),如果我们在一个(grep -v
上,名称来自{{1},则丢弃当前分支}),并使用这些分支名称排除其他分支上的任何提交。
(任何其他参数都像往常一样添加到别名中,因此git symbolic-ref
可以在这里工作。)
如果你确实想要从第一次合并(两次或多次父级)提交和向后工作中排除所有提交,那么这里使用git ltf --oneline --graph
和git rev-list
或{{ 1}}(这些是相同的选择器)来定位它:
--merges
这是提供--min-parents=2
(或前缀git rev-list --merges -1 HEAD
的提交ID,但是如果没有这样的转换,则会出错,所以--not
在这里更优秀:
^
(同样,第二个--not
会反转第一个[alias]
ltm = !git log HEAD --not $(git rev-list --merges -1 HEAD) --not
的效果,就像上面的--not
别名一样。)因此,使用此别名,--not
会产生:
ltf
(由于没有货叉,因此git ltm --graph --oneline
保证无聊。)