2011-03-01 142 views
10

我遇到了一個情況,其中git cherry-pick X會有一些衝突,但也創建額外的插入(當與git diff驗證)。git cherry-pick和git show之間有什麼區別? patch -p1?

然後我重新運行git show X > my.patch,然後在我的樹上做了patch -p1 < my.patch。 我得到了更好的結果,一些衝突,但結果更清晰。

git對櫻桃採摘有什麼特別之處?我使用git 1.7.0.4。

編輯: 通過更清潔的結果,我指的是結果樹匹配更大量的git show X的結果,而git cherry-pick包含了很多代碼。

+1

創建精簡的測試用例非常有用。 – 2011-03-01 16:37:08

+0

我與jleedev在這裏:你對差異的描述仍然很難理解。 'git show'顯示你的差異,而你的樹是完整的內容。它更有意義比較'git的表演X'和'混帳顯示X'',其中'X''是精挑細選的版本。 'X''包含更多代碼嗎? – Cascabel 2011-03-02 15:34:23

回答

7

當你摘櫻桃的提交,其提交使用承諾,而不僅僅是它代表DIFF的所有元數據的結果 - 你會得到原始的提交信息和作者。你的補丁管道會爲你提供你想要的工作樹內容,但是你必須自己提交,希望可以用git commit -c <original-commit>複製像cherry-pick那樣的元數據。櫻桃挑選還有一些額外的選項可能會有幫助,並且可以接受多個提交(可能指定爲rev-list範圍)。 patch顯然不支持任何。

我不確定你的主張,結果是「更清潔」。你是否建議git應用diff的方式與patch不同?

+1

是的。我使用git-cherry-pick和patch獲得的樹內結果非常不同。我試圖理解爲什麼。 – 0x6adb015 2011-03-01 16:23:00

+0

@ 0x6adb015:嗯,我不能說太多,更重要的是Git使用其自己的差異/補丁機器內部,這顯然不等同於GNU diff和patch。我見過的差異,但主要的git做得更好,當修補程序不擁有儘可能多的信息,Git有訪問 - 不是一般的補丁表現更好。如果你覺得Git的結果*錯*,你可能需要將其報告爲一個錯誤。 – Cascabel 2011-03-01 16:25:27

相關問題