2009-12-26 61 views
1

說我合併了一個分支到我的主分支,工作了一段時間,然後意識到合併後引入了一些錯誤。合併分支與主,然後列出所有文件

我怎樣才能看到合併中受影響的文件列表,然後逐個看到它們的差異?

+1

也許這個問題的答案可以幫助你? http://stackoverflow.com/questions/424071/how-do-i-list-all-the-files-for-a-commit-in-git – Makis 2009-12-26 20:49:43

回答

2

git bisect,正如另一個答案中所建議的那樣,對於追蹤哪個提交引入了一個錯誤並且很快就能找到您的問題非常有用。然而,合併提交可能是錯誤的合併提交,無論如何,直接回答您的問題可能會很有趣。

首先,你應該找到對象名稱合併的(即SHA1總和)提交你有興趣,也許git log --graph --pretty=onelinegitk - 讓我們說,這個合併提交的對象名與d8fa開始的這個例子。

在git中,提交是根據樹的完整快照而不是對樹的更改來定義的,並且對於與兩個(或更多)父級合併爲任何其他提交,這是真實的。所以,關於合併提交更改內容的最明顯的問題可能是「關於此合併的每個父項有何變化?」你可以參考第一父爲d8fa^1並且第二親爲d8fa^2,所以你可以看到哪些文件對於改變每個:

git diff --stat d8fa^1 d8fa 

...和:

git diff --stat d8fa^2 d8fa 

或者你可以看到這些都一氣呵成有:

git whatchanged -1 -m --stat d8fa 

(你可以改變--stat-p看到完整的diff,而不是diffstat的wi第git whatchanged,或者只是將--statgit diff省略。如果你只是想看到一個文件的差異對一個家長,你可以做git diff d8fa^1 d8fa -- README.txt,例如)

在大多數情況下,這種輸出可能不是很有趣 - 這將主要是它是在一個父引入的更改但不是其他。但是,檢查git show d8fa的輸出也是值得的 - 如果合併引入的變化似乎不在父代中,有時稱爲evil merge,這將僅顯示補丁作爲其輸出的一部分。

0

最好的辦法是將bug描述成測試,然後使用git bisect來告訴你哪個更改引入了錯誤。如果你不使用自動化測試,它會更難(不會自動化),但它會告訴你引入錯誤的具體變化。

假設項目中的人善於溝通變化很小(是一件事)和描述性(描述哪一件事情是好的),那麼確定究竟是什麼東西的努力是微不足道的。

相關問題