我有我的主分支并且这样做:
git checkout -b parentBranch
git ... (do some commits)
git checkout -b childOfParentBranch (this is while still on branch parentBranch)
git ... (do some commits)
然后我按照这个确切的顺序合并(重要):
git checkout master
git merge childOfParentBranch --no-ff
现在我如何进行git日志,在那里我可以看到两个分支的名称?
有些事情:
*
|-Merged parentBranch and childOfParentBranch
或者:
*
|-Merged parentBranch
|-Merged childOfParentBranch
修改 我添加了提交语句,因为缺少它们会导致误解。
我试图使用“git log”向我展示合并为master的所有分支名称。即使只有childOfParentBranch合并到master中,它也包括parentBranch的名称。如果我使用gitk进行操作,这些值很明显,但我需要使用“git log”来进行自动化。
亲切的问候 基督教
答案 0 :(得分:3)
关于编辑:
尝试使用git log --graph --decorate
(可能使用--oneline
)和--all
(所有分支,标签等),或者命名您关注的分支。请注意,分支名称(标签)可以随时删除或移动,因此您无法依靠附近的名称。
在移动或删除分支标签 之前,您可以看到哪些是"合并" (使用git branch --contains
和git branch --merged
指向或低于给定的提交ID。例如,给定一个如下所示的提交图,如图所示的四个分支标签表示提交G
,H
,F
和E
:
G <-- br1
/ \
A--B--C--D---H <-- br2
\ \ /
\ F--/ <-- br3
\
E <-- br4
你可以跑,例如:
git branch --contains br1^ # br1^ identifies commit `D`
查看&#34;其提示提交的分支是指定提交的后代&#34;。这些是br1
和br2
。换句话说,从br1
开始,即G
,我们可以向后走,到达D
;从br2
开始,即H
,我们可以向后走,到达D
。但是,从F
开始br3
开始,向后行走不会达到D
,从E
开始经过br4
,向后行走也不会达到D
1}}。)
您还可以运行:
git branch --merged br2 # br2 identifies commit H
(如文档中所述)查找&#34;分支,其提示提交可从指定的提交&#34;中找到。这会打印br1
,br2
和br3
。我们从H
开始,沿着所有向后的路径行走。 H
本身由标签br2
标识,因此会打印br2
。然后我们走了它的父母; H
有三个:D
,G
和F
(其中一个是&#34;第一个&#34;父级,但此处显示的图表并未说明我们哪一个,而git branch --merged
git无论如何都不关心)。提交G
是由名称br1
标识的提交,因此打印br1
。提交D
未被任何内容识别。提案F
由br3
标识。我们还会检查D
和F
的父母:这些是C
,然后是B
,然后是A
,然后就没有父母了。在这种情况下,它们都没有标签(但如果我们要添加一个指向,例如,提交A
,git branch --merged
也会打印该标签。
(还有git branch --no-merged
应用于提交H
,在这种情况下会打印br4
。它只是--merged
的反面:print分支标签,如果它们指向不从给定起点可到达的提交。)
分支实际上并没有父/子关系(尽管如果你愿意,你可以将它们读成存在 - 但这里的重点是你必须从图中发明它们)。此外,您建议的命令序列不会发生任何事情。
让我更具体一点,因为&#34;分支&#34;可以参考两个不同的概念。提交有向图形成了提交链,而实际提供&#34;提示&#34;的分支名称;某些分支,例如experiment
,master
或feature
:
C--D--E <-- experiment
/
A--B--F--G <-- master
\
H--I <-- feature
名称experiment
指向的分支以提示E
结束。该分支由提交A
到E
组成。分支名称(单个)提交E
。但我们也谈论&#34;分支&#34;从A
到E
包括在内。
同时,名称master
指向的分支以提示G
结束。该分支由A
,B
,F
和G
组成;但分支只是名称 G
。和以前一样,&#34;分支&#34;意味着两种不同的东西,取决于我们想要它的意思:尖端,或从尖端开始并向后工作形成的线。
那就是说,如果你在&#34; on&#34;分支master
并执行两个git checkout -b
命令,创建两个新的分支标签。默认情况下,这些标签指向相同的提交为master
。所以,如果你从这开始:
A--B--F--G <-- HEAD=master
然后你跑:
$ git checkout -b br1
Switched to a new branch 'br1'
$ git checkout -b br2
Switched to a new branch 'br2'
然后你现在有:
A--B--F--G <-- master, br1, HEAD=br2
所有三个标签都指向相同的提示提交(在这种情况下为G
)。使用git log --decorate
查看标签。 (根据需要,我也喜欢使用git log --oneline --graph --decorate
,有或没有--all
。另外,我将HEAD=
放在上面的图表中,告诉你哪个分支是&#39} #34;上&#34;。)
如果您再尝试序列:
$ git checkout master
Switched to branch 'master'
$ git merge br1 --no-ff
你得到了各种各样的投诉:
Already up-to-date.
因此,没有发生任何事情。
让我们通过向其添加空提交,使br1
成为您可以合并的内容:
$ git checkout br1
Switched to branch 'br1'
$ git commit --allow-empty -m 'empty commit'
[br1 add230d] empty commit
图表现在看起来像这样(我在这里忽略experiment
和feature
,并在br1
下方随意绘制master
:
A--B--F--G <-- master, br2
\
J <-- HEAD=br1
(因为新添加的提交会导致标签br1
移动到指向它。)
现在可以回到master
并进行合并:
$ git checkout master
Switched to branch 'master'
第一步只是移动HEAD
标签:
A--B--F--G <-- HEAD=master, br2
\
J <-- br1
下一步创建合并提交:
$ git merge --no-ff br1 -m 'merge br1'
Already up-to-date!
Merge made by the 'recursive' strategy.
merge
向两个父母添加一个新的提交,指向HEAD
分支的master
分支。像往常一样,标签master
移动以指向新提交。这使得显示br2
点的位置变得有点困难,因此我将绘制更长的ASCII箭头:
.--------- br2
|
v
A--B--F--G---K <-- HEAD=master
\ /
J <-- HEAD=br1
请注意,分支br2
以G
结尾。这是分支br2
的提示,因此G
是 a&#34; tip&#34;提交,即使它也是merge-commit K
的父级。
这里有一堆关键的外卖消息:
分支本身由提交图形成,并在我们解释它们时按照我们想要的那样长(或短)运行。合并后你可以把分支视为&#34;伸出&#34;的部分,即C
之后的顶部的东西:
o--o "branch"
/ \
B--C---o--M--o "main line"
或者您可以将其视为整个事情,包括提交B
和C
。
HEAD
命名一个分支,该分支标签是前进的。 (使用&#34;分离的HEAD&#34;,HEAD
文件提供原始提交SHA-1,并且HEAD
本身被修改为包含新的原始提交SHA-1。)M
。不可能将提交与自身合并,因为合并提交必须至少有两个不同的父提交(这就是使它成为合并提交的原因!)。上面没有显示,但也是一个关键概念:&#34;第一个父母&#34;合并的是#34;在分支上的提交&#34;在合并之前(假设HEAD
命名为分支),所有其他父项是&#34;合并在&#34;中的提交。 Git本身并不关心合并的完成方式 - 标签可以更改或删除 - 但是这可以让你(用户)为自己或后来进入的任何其他人留下面包屑的痕迹完成。
答案 1 :(得分:1)
命令git log --pretty=format:"%h - %an, %ar %s" --graph
可以显示已合并的日志
显然你可以改变格式。在提供的示例中
%h
- 缩写提交哈希%an
- 作者姓名%ar
- 作者日期,亲属%s
- 主题实施例
$ git log --pretty=format:"%h - %an, %ar %s" --graph
* 084648c - XXX, 7 days ago Merge pull request #10 from XXX/oneplugin
|\
| * bb0f3cc - XXX, 7 days ago Switched to using one plugin only
|/
* 91e7ecd - XXX, 7 days ago Removed maven, using gradle instead
* ea6f1ce - XXX, 7 days ago Comments in build.gradle, added descriptions of tasks
* a6b69bb - XXX, 8 days ago Bumped version to 2.6
* 73ae95f - XXX, 8 days ago Merge branch 'master' of XXXXX
|\
| * 3e70f9a - XXX, 8 days ago Update README.md
* | 96913ce - XXX, 8 days ago Working gradle script to upload to OSS
|/
* 91ff7da - XXX, 8 days ago Bumped gradle to 2.6
答案 2 :(得分:0)
你可以做到
git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%Creset' --abbrev-commit