在同一提交中的两个git分支,“ git log a..b”显示了区别

时间:2018-11-16 19:06:08

标签: git github

我有一个master和一个prod分支,它们跟踪同名的遥控器,并且根据git log都是相同的提交

picture of git log telling me that they're on the same commit

here's a second picture of github showing me that they're pointing to the same thing

但是,当我键入git log prod..master时,我从上一个〜week似乎在两个分支中都得到了一堆提交。

如果我git branch -vv可以看到prod跟踪origin/prod,并且如果我git branch -a | grep prod可以

* prod
remotes/origin/prod

另外,当我git checkout prod时,我得到warning: refname 'prod' is ambiguous.

我对发生的事情完全感到困惑-有人可以给我...指针(对不起)。

2 个答案:

答案 0 :(得分:2)

由于您提到了git log标记,表明本地prod和远程prod分支是相同的,因此存在很多差异,因此看起来好像您有一个名为prod的标签

如果您不熟悉标签,请阅读以下答案:
What is git tag, How to create tags & How to checkout git remote tag(s)

简而言之,使用此命令来检查您的标签:

git tag --list

答案 1 :(得分:2)

如果不是标签,则必须是其他引用,其优先级在搜索顺序中“胜过”而不是分支名称。 The gitrevisions documentation提供了将符号名解析为哈希ID的六步过程:

  
      
  1. 如果存在$GIT_DIR/<refname>,这就是您的意思(这通常仅对HEADFETCH_HEADORIG_HEADMERGE_HEADCHERRY_PICK_HEAD);

  2.   
  3. 否则,如果存在refs/<refname>,则为refs/tags/<refname>

  4.   
  5. 否则,如果存在refs/heads/<refname>,则为refs/remotes/<refname>

  6.   
  7. 否则,如果存在refs/remotes/<refname>/HEAD,则为git log prod..master

  8.   
  9. 否则,如果存在prod,则为master

  10.   
  11. 否则,如果存在$GIT_DIR

  12.   

当您写prod时,名称refs/prodprod分别经过六个步骤。如果prod中有一个名为git log --oneline的文件,其中包含哈希ID,则第1步将找到该文件并使用其值。如果不是,Git将继续执行步骤2,以查看refs/heads/prod是否命名哈希ID。如果不是,则Git将继续执行步骤3(尝试将9e0ae5792f3c80e76a2b41ed325fa1a20d599a4f解析为标签名称),如果失败,请继续执行步骤4(将尝试将prod解析为分支名称)。

鉴于git tag --list图片显示git checkout 存在,步骤4肯定会成功,并产生值git checkout(如果我正确地转录了它) 。因此,git checkout prod可以解析为不同哈希ID的唯一方法是前面步骤之一是否成功。

标签名称是最可能的罪魁祸首,但是your comment暗示没有标签名称:它们将显示在refs/heads/prod输出中。剩下的步骤可能是步骤1或步骤2。

请注意,当您使用git for-each-ref时,Git 不会按该顺序应用六步过程:首先,Git尝试使用该名称作为分支名称。只有失败了,Git才会退回到六步过程。如果成功,$GIT_DIR/prod将分离您的HEAD,并通过其哈希ID检出提交。因此,即使参考名称不明确(除了.git之外,还有其他含义),您仍可以prod进入分支。

命令.asBitmap()将打印出每个引用(第2步到第6步可以匹配的所有内容)。它不会检查 Glide.with(this) .asBitmap() .load(imageAsBytes) .into(image) (第1步将匹配),但是您可以自己查看.valueChanges()目录中的内容以查看是否存在名为viewTemplate.ts的文件。