2011-10-23 152 views
4

我有以下情況:的Git:拆分提交的其他分支

root -- A -- D ------------- H ------master 
    \   \    \ 
    \   \    \ 
     - B -- C -- E -- F -- G -- I -- J -- dev 

提交「F」包含修正錯誤,起初似乎是無關的主分支,但幾個星期後,它被證明是很重要。一切都已經承諾和推動。

但是另一個問題是'F'commit包含一些變化,並且只有其中一個與master有關。所以,我想的是:

  • 拆分˚F成2次獨立的提交(一個用於相關變化[F1],另一個用於其他[F2])
  • 合併F1與主

我不需要更改開發分支歷史記錄。

除手動diff +補丁外,我還可以做其他任何事嗎?

我想象像

root -- A -- D ------------- H ---K--master 
    \   \  /-------\--/  
    \   \ /-F1-F2-\ \-----\   
     - B -- C -- E ------- F -- G -- I -- J -- dev 

(對不起,草率的線條藝術)

+0

我會去用手動diff和patch,那有什麼問題? PS:你應該做更小的提交;) – Simon

+0

當然,現在我強制所有開發人員這樣做。但不像git,我無法改變過去。 :) – user986654

回答

8

我會做到以下幾點:第一摘櫻桃承諾f控制--no-commit master分支,然後階段改變你在主人需要,放下一切。我知道這聽起來並不像是一個完美的解決方案,但合併F到高手的時候,你也將獲得的F所有祖先的提交(來自Dev分支:ECB):

git checkout master 
git stash 
git cherry-pick --no-commit F 
git reset && git add -p 
# alternatively reset already staged changes: 
git reset -p 
git commit 
git reset --hard 
git stash pop