![](/img/trans.png)
[英]Retrospectively added some tags but git log A..B shows no commits
[英]two git branches at same commit, “git log a..b” shows a difference
我有一個master
和prod
分支,它們跟蹤同名的遠程對象,並且根據git log
兩者都是相同的提交
但是,當我鍵入git log prod..master
我從上一個〜周中得到了一堆提交,這似乎是在兩個分支中。
如果我git branch -vv
我可以看到prod
跟蹤origin/prod
,並且如果我git branch -a | grep prod
我得到的git branch -a | grep prod
* prod
remotes/origin/prod
另外,當我git checkout prod
我得到warning: refname 'prod' is ambiguous.
我對發生的事情完全感到困惑-有人可以給我一個指針嗎(對不起)。
既然您提到了git log標記,表明本地prod和遠程prod分支是相同的,則有很多區別,看起來您有一個名為prod
的標簽
如果您不熟悉標簽,請閱讀以下答案:
什么是git標簽,如何創建標簽以及如何檢出git遠程標簽
簡而言之,請使用以下命令檢查您的標簽:
git tag --list
如果不是標簽,則必須是其他引用,其優先級在搜索順序中“勝”為分支名稱。 gitrevisions文檔提供了將符號名稱解析為哈希ID的六步過程:
如果
$GIT_DIR/<refname>
存在,這就是您的意思(這通常僅對HEAD
,FETCH_HEAD
,ORIG_HEAD
,MERGE_HEAD
和CHERRY_PICK_HEAD
);否則,
refs/<refname>
如果存在);否則,使用
refs/tags/<refname>
如果存在);否則,
refs/heads/<refname>
如果存在);否則,
refs/remotes/<refname>
如果存在);否則,
refs/remotes/<refname>/HEAD
如果存在)。
當您編寫git log prod..master
,名稱prod
和master
分別經過此六步過程。 如果$GIT_DIR
中有一個名為prod
的文件,其中包含哈希ID,則步驟1將找到該文件並使用其值。 如果不是,Git將繼續執行步驟2,以查看refs/prod
命名了哈希ID。 如果不是,Git將繼續執行步驟3(嘗試將prod
解析為標簽名稱),如果失敗,請繼續執行步驟4(將prod
解析為分支名稱)。
鑒於git log --oneline
圖片顯示refs/heads/prod
確實存在,步驟4肯定會成功,產生值9e0ae5792f3c80e76a2b41ed325fa1a20d599a4f
(如果我正確轉錄的話)。 因此, prod
解析為其他哈希ID的唯一方法是前面步驟之一是否成功。
標簽名稱是最有可能的罪魁禍首,但是您的注釋暗示沒有標簽名稱:它們將顯示在git tag --list
輸出中。 剩下的步驟可能是步驟1或步驟2。
請注意,當您使用git checkout
,Git 不會按該順序應用六步過程:首先,Git嘗試使用該名稱作為分支名稱。 只有失敗了,Git才會退回到六步過程。 如果成功,則git checkout
將分離您的HEAD,並通過其哈希ID檢出提交。 因此,即使參考名稱不明確(除了refs/heads/prod
之外,還有其他含義),您也可以git checkout prod
並進入分支。
git for-each-ref
命令將打印出每個引用(第2步到第6步可以匹配的所有內容)。 它不會檢查$GIT_DIR/prod
(與步驟1匹配),但是您可以自己查看.git
目錄中的內容,以查看是否存在名為prod
的文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.