使用相同提交哈希时当前分支对git log命令有影响吗?附Git场景问询
Git 相关问题解答
问题1:当我使用相同的提交哈希值时,当前所在的分支是否会对git log命令的执行产生影响?
完全不会哦!Git里的提交哈希是全局唯一的标识,不管你当前在哪个分支上,只要你用的哈希值(哪怕是部分哈希,只要能唯一匹配到某个提交)是有效的,git log针对这个提交的查询结果都是一致的。
原因很简单:所有提交都存储在Git的全局对象数据库里,分支只是指向某个提交的“指针”而已,它不会限制你对全局提交的访问。举个例子,你在main分支执行git log a1b2c3,和在feature分支执行同一个命令,只要a1b2c3对应的提交存在,输出的日志内容完全相同。
问题2:现有分支结构下,执行指定git log命令会得到什么结果?
先明确你的分支关系:develop分支是A -> [...] -> C -> D -> E的提交链,feature1分支是从A分叉出来的X -> Y提交链,对吧?当你切换到develop分支执行git log --oneline b0a710ad5..0fc0d3 A...时,我们拆解一下命令的作用:
b0a710ad5..0fc0d3:这个范围表示所有能从Y(0fc0d3对应的提交)到达,但无法从A(b0a710ad5对应的提交)到达的提交。因为Y的父提交是X,X的父提交是A,所以这个范围会包含feature1分支上的X和Y两个提交。A...:Git里如果只写单边的三点语法(比如A...),默认等价于A...HEAD——而你当前在develop分支,HEAD指向E。这个三点范围的意思是所有能从E到达,或者能从A到达,但无法从A和E的合并基础到达的提交。由于A和E的合并基础就是A自己,所以这个范围实际是develop分支上A之后的所有提交(包括A和C之间的未知提交,以及C、D、E)。
最终,git log --oneline会输出这两个范围的并集:也就是feature1上的X、Y,加上develop上A之后的所有提交,并且默认按照提交时间从新到旧的顺序显示每条提交的简洁信息。
内容的提问来源于stack exchange,提问作者JCollier
相关产品推荐
相关产品推荐

