簡體   English   中英

在同一提交中的兩個git分支,“ git log a..b”顯示了區別

[英]two git branches at same commit, “git log a..b” shows a difference

我有一個masterprod分支,它們跟蹤同名的遠程對象,並且根據git log兩者都是相同的提交

git log的圖片告訴我他們處於同一提交

這是github的第二張照片,向我展示了他們指向的是同一件事

但是,當我鍵入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的六步過程:

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

  2. 否則, refs/<refname>如果存在);

  3. 否則,使用refs/tags/<refname>如果存在);

  4. 否則, refs/heads/<refname>如果存在);

  5. 否則, refs/remotes/<refname>如果存在);

  6. 否則, refs/remotes/<refname>/HEAD如果存在)。

當您編寫git log prod..master ,名稱prodmaster分別經過此六步過程。 如果$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM