繁体   English   中英

git日志结果混乱

[英]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

因为名称HEADmasterAB都指向c7887dd (由于名称指向它而被保留),并且5046cbf是根提交(由于是根提交而被保留)。


1请注意,这只会停止将更多提交添加到“要检查的提交”队列中。 如果队列中已经有许多排队的提交,则该过程将继续进行检查。 如果图中有多个根落实,则此过程可能会找到多个或全部(取决于遍历的起始位置)。

git loggit rev-list都进行图内提交节点的广度优先遍历,但是都提交进行排序 添加--graph强制排序使用--graph拓扑的顺序,在该顺序中,直到显示了所有子级(在正常的“向后”方向上工作时),才显示父级提交。

2粗粗重新检查源代码表明,这是不完全正确的:如果他们有一个空树附根的提交将被丢弃。 根据给git loggit rev-list任何pathspec参数修改附件树之后,将执行此检查,因此在查找修改了某些特定文件的提交时,您不会看到root提交。 在这种情况下,没有路径说明,因此,如果根提交实际上是空的(指的是空树 ),您将不会看到根提交。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM