2013-08-20 69 views
0

比方說git的樹顯示爲:應用從以前的一個git補丁提交到以後提交

1 ----> 2 ----> 3 -----> 4(HEAD/MASTER) 
     \ 
     \ (PATCH) 
     --2A-> 

,我有一個補丁是2的DIFF和2A增加了一個功能。

有沒有一種巧妙的方式將這個補丁應用到最新的提交? 假設我擁有的是補丁文件和主線的git repo。

+1

你試過'git am '或'git apply '?... – TheCodeArtist

回答

0

由於TheCodeArtist points out,如果你有一個補丁文件,你可以簡單地使用git apply <patch>應用它:

git checkout master 
git apply <patch> 

按照official Linux Kernel Git documentation for git apply

NAME

git-適用 - 對文件和/或索引應用補丁

說明

讀取供給diff的輸出(即「一個補丁」)並將其應用於文件。

此命令應用修補程序,但不創建提交。使用git-am(1)來創建由git-format-patch(1)生成的補丁和/或通過電子郵件接收的補丁。

1

先試試簡單的方法。如果你已經在主,

git apply PATCH 

如果補丁不適用於HEAD /主,試試這個:

git checkout 2 
git apply PATCH 
git tag patch-applied 
git checkout master 
git cherry-pick patch-applied 

OR

git checkout 2 
git apply PATCH 
git tag patch-applied 
git checkout master 
git merge patch-applied 

對於這兩個融合和底墊它可能發生,你需要解決衝突。 rebase給你一個線性歷史,合併給你一個分支的歷史。

您可以使用git lola查看您創建的歷史記錄。

+0

編輯我的答案,如果你這樣做,你需要櫻桃選擇而不是rebase。 – donquixote