[英]How to search a git repository history to find a merge error?
在我們過去的某些時候,git的開發分支被合並了。 但是,做出了錯誤的合並決定,因此有些代碼沒有進入我們預期會出現的主分支。 (在最終合並到主分支之前,有多個不同分支的合並。因此分支和合並歷史相當復雜。)
有沒有一種簡單的方法來搜索git存儲庫以確定哪個合並做出了“錯誤”的決定?
(我已經知道這個特例的答案,但找到它的過程有點乏味。)
編輯:git blame證明不合適的原因是在合並錯誤后的某個時間觸及了行。
在您的案例中可以git-bisect幫助嗎?
Git日志具有強大的搜索選項。 由於有跡象表明您可能知道一大塊代碼消失了,您可以搜索該代碼串
git log <HERE>..<THERE> -S"line I care about" --diff-filter=M
將從HERE搜索到-S
之后的字符串以及僅修改(添加或刪除)行的位置
如果使用-G而不是-S,則可以在搜索中獲得更高的精度。 -G提供正則表達式搜索,而不是使用-S進行字符串文字搜索。
如果您知道由git branch merge修改的文件中的一行,您可以執行'git blame file.txt'並確定提交哈希編號並提交文件中該行的作者。 然后你可以瀏覽git日志並提取與壞分支合並相關的確切提交。
編輯:回應作者的評論,如果你正在尋找某一行的消失,那么'git diff'結合grep和二分搜索可能就是你想要的。 假設你有0,1,2,3,4,5,6的提交號碼。 你知道該行存在於修訂版0中,但在修訂版6中消失了。使用'git diff'加上grep來搜索消失。
git diff 0 6 | grep '- line I care about'
第一次迭代,你會看到你關心的線消失。 然后將修訂號減半,然后重試
git diff 0 3 | grep '- line I care about'
如果grep仍顯示該行消失(帶有' - '符號),那么您就知道該行在版本0到3中消失了。如果grep 沒有顯示該行消失,則該行在修訂版4-6中消失。
繼續將修訂版切成兩半,直到找到罪魁禍首。
對於尋找更簡單解決方案的其他人,啟動gitk
(或從Git GUI轉到Repository> Visualize X History)並使用其查找工具。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.