在仓库的图形表示中,分支是一系列提交的路径,这种说法正确吗?或许吧。这取决于你对“分支”和“路径”的理解。(你是指图论中的“路径”吗?如果是,那么可能不太准确,因为“路径”只是指通过某些节点和边而不重复通过任何节点的任何非空步行;尽管现在我们需要知道你对“分支”的理解...)
如果查看一个存储库的图形,并且分支名称指向每个分支的末端,但没有显示每个分支的起始提交,那么如何找出每个分支的起始提交?通常情况下是无法找到的。以下是图形的一部分:
B - C
/ \
... o - A F - G <-- br
\ /
D - E
分支br
的"开始提交"是什么?是B
,还是A
,或者比A
更早(在...-o
链中)? D
和/或E
来自哪个其他分支(如果有的话)?
如果有其他名称,它们可能提供足够的线索来猜测:
B - C
/ \
... o - A F - G <-- br
\ /
D - E <-- newfeature
日志信息也可能提供线索;例如,
F
的日志信息可能是
merge branch newfeature into br
。在这种情况下,
D
可能是分支
newfeature
的“起始提交点”,而做出提交
F
的人是在分支
br
上执行了
git merge newfeature
。因此,
br
的起源很可能是在
A
之前。
引用日志也可能提供这些线索。
然而,除了日志信息外,这些其他线索都可能消失。一旦合并了
newfeature
,我们就可以删除该名称(及其引用日志);默认情况下,引用日志条目在 90 天后过期(或者如果它们所指向的对象从最顶端对象不可访问,则为 30 天)。
另一方面,同样的图可能通过不同的方式产生:
B - C
/ \
... o - A F - G <-- br
\ /
D - E <-- origin/br
origin/br
的起始点可能与
br
的起始点相同,合并
F
发生在某人执行
git merge
(或许是作为
git pull
的一部分)以将他/她的工作与别人的工作结合起来时。两个用户都在自己的
br
分支上工作,在共享某些仓库或存储库(或许是一个集中式服务器)。
当你问自己“分支 X 上的第一个提交是什么”时,Git 鼓励你停止询问(或者问自己“我为什么要关心它?”)。
git log --oneline --graph --decorate
。 - Zlojgit log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
这是一个示例,演示如何更改颜色并编写自定义日志记录器输出。 - CodeWizard