我試圖在我們的代碼庫中找到一個錯誤的來源。我有一個我懷疑導致破壞的提交SHA,但我也知道該錯誤開始出現的日期。我想檢查給定提交何時合併到我們的主分支中。如何判斷給定提交何時進入分支?
有沒有簡單的方法來做到這一點?
我試圖在我們的代碼庫中找到一個錯誤的來源。我有一個我懷疑導致破壞的提交SHA,但我也知道該錯誤開始出現的日期。我想檢查給定提交何時合併到我們的主分支中。如何判斷給定提交何時進入分支?
有沒有簡單的方法來做到這一點?
git bisect
應該可以幫助你很好地找到bug。
https://www.kernel.org/pub/software/scm/git/docs/git-bisect.html
http://git-scm.com/book/en/Git-Tools-Debugging-with-Git#Binary-Search
至於提交SHA你的目標,只是在其上運行git log
,它會告訴你所有的提交(日期,作者等)。在其上運行git log -p
以查看提交所做的更改。
git branch --contains SHA1
應該打印出包含給定提交的所有分支。
你可以找到犯罪嫌疑人提交基於一個日期:
git log --before=<date> -n 1
前
這,或一些帶有日期一兩天,可能是您的git bisect
「好」的起點。
我認爲這個答案是迄今爲止最好的。OP並沒有要求提交*引入了已知的錯誤 - 但是當這個提交成爲特定分支歷史的一部分時。這與'git branch --contains'結合作爲git-bisect的「測試」可以做到。但是,這是否也有一個git單線程呢? – gcbenison
我假設你的主分支是master
,而你懷疑的SHA是$SHA
。
首先,找到合併提交了在master
但不是在$SHA
的歷史:
$ git log --merges --oneline $SHA..master
然後,測試每一種合併提交,以確定哪一個包含$SHA
。我們假設一個給定的合併提交ID在$MERGE
。您可以通過此提交列出所有已合併到master
中的提交,其中包括git log --oneline $MERGE^..$MERGE
。
(這工作,因爲$MERGE^
是$MERGE
的(第一)的父母,即master
在合併之前的快照,因此$MERGE^..$MERGE
被列出在$MERGE
的提交而不是在$MERGE^
,即$MERGE
的提交而不是在master
前你可以grep
爲目標$SHA
合併)
然後:
$ git log --oneline $MERGE^..$MERGE | grep ^$SHA
第一合併提交該得到任何出過去grep
是你的贏家。一旦你確定了提交,你可以git show
它的更多信息。
$ git show $MERGE
如果有人知道這個,我會對更簡單的方法感興趣。
太棒了,通過了git書的對分概述,並找到了提交。非常酷 – Swaraj