[英]confusing git log results
为了获得git分支层次结构,我向git repo发出以下命令:
git log --all --graph --decorate --oneline --simplify-by-decoration
但是,我得到一个令人困惑的结果:
* 023448b (I) Comments
| * 7b08b45 (H) Comments
|/
| * 379334c (G) Comments
| * ec95b66 (F) Comments
|/
| * dca9a7b (E) Comments
|/
| * f7bb48a (D) Comments
|/
| * 82224b2 (C) Comments
|/
* c7887dd (HEAD, master, A, B) Commments
* 5046cbf Initial Commit: Comments
最后一行显示三个分支。 它不应该只显示master
吗? 最后一句话是什么意思?
我不知道您所说的“最后一句话”是什么意思,但是:
它不应该只显示师父吗?
不,你说--all
。 全部表示全部:所有分支,所有标签以及所有其他引用。 如果您只想看分支master
您应该说master
。
git log
查找要提交的提交的方式是从一组引用开始,然后检查这些引用指向的每个提交,然后查看那些提交的父提交,然后查看父的父辈,依此类推。 这种“遍历”历史(查看每个提交的父母或父母,并排队这些提交以进行进一步检查)只是从指定点开始 ,一直持续到不再提交为止。 只要此过程到达root commit ,即没有父项的提交,就提交“用尽”。 1个
git log
的默认名称是从名称HEAD
开始,除非您命名其他起始点。 您这样做:您说--all
,这意味着所有起点(reflogs除外)。
与此同时:
--simplify-by-decoration
指示git log
跳过没有指向其分支或标记名称的提交。 然而,无论出于何种原因,这从来没有跳过2根提交。 和:
--decorate
指示git log
在显示的任何提交上放置指向该提交的任何分支和/或标记的名称(当然,这些是由--simplify-by-decoration
保留的那些,根提交除外)。 因此,如果将--all
替换为master
,则应该看到:
* c7887dd (HEAD, master, A, B) Commments
* 5046cbf Initial Commit: Comments
因为名称HEAD
, master
, A
和B
都指向c7887dd
(由于名称指向它而被保留),并且5046cbf
是根提交(由于是根提交而被保留)。
1请注意,这只会停止将更多提交添加到“要检查的提交”队列中。 如果队列中已经有许多排队的提交,则该过程将继续进行检查。 如果图中有多个根落实,则此过程可能会找到多个或全部(取决于遍历的起始位置)。
git log
和git rev-list
都进行图内提交节点的广度优先遍历,但是都对提交进行排序 。 添加--graph
强制排序使用--graph
拓扑的顺序,在该顺序中,直到显示了所有子级(在正常的“向后”方向上工作时),才显示父级提交。
2粗粗重新检查源代码表明,这是不完全正确的:如果他们有一个空树附根的提交将被丢弃。 根据给git log
或git rev-list
任何pathspec参数修改附件树之后,将执行此检查,因此在查找修改了某些特定文件的提交时,您不会看到root提交。 在这种情况下,没有路径说明,因此,如果根提交实际上是空的(指的是空树 ),您将不会看到根提交。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.