2013-07-10 24 views
0

我在提交A中對文件做了一些更改,然後我錯誤地解開了更改,然後繼續對提交B和C進行更改。Git:如何將文件與之前提交的文件合併爲一個版本?

我希望提交A中的更改處於我的文件,但B和C的變化也不應該丟失。

比方說,現在我的分支是C.

我不想

$ git checkout --patch 

,因爲我想我包含在B和C所做的更改文件和做的結賬來自提交A的文件將重寫索引和工作樹中的文件。

我不能做櫻桃選擇,因爲提交A是一個合併提交(有兩個貢獻者的存儲庫,我刪除了我的導師在合併後他們在後續的提交中犯的錯誤),我可能如果我指定了其中一個父項,最終會導致混亂。

除了手動複製文件中所需的更改外,還有其他方法可以實現嗎?

回答

5

您可以create a patch並嘗試apply the patch。如果遇到衝突問題,如

error: patch failed: <file_name>:1 
error: <file_name>: patch does not apply 

合併將需要人工干預。

下面是一個例子:

$ git format-patch -n <sha_from_commit_you_want_to_merge> > patch_file.patch 
$ git apply patch_file.patch 

很可能這種策略仍然會因爲犯答:您不能分離合並組成成分的性質問題的承諾,而訪問分支從何處個人犯下了承諾。你的分支/回購只是將其視爲一次提交。

當然,如果你有權訪問原始分支,你可以從那裏創建一個補丁文件,even if they are in different repositories

+0

我希望有一種更自然的方式! – rivendell

+0

我不知道它能比兩個合併代碼的命令簡單得多(是的,一個命令會更容易:))。如果存在不可調和的合併問題,我不知道版本控制系統可以比Git做得更好。如果您在使用此方法時遇到問題,請修改您的帖子或添加評論,我們會看到我們可以做些什麼。 – eebbesen

+0

對於馬虎的反應,我很抱歉!沒有任何藉口,但我一直在修復代碼中的bug,並發現這個git問題是一個干擾!那麼,我實際上認爲'git-merge-file'會做類似於解決我的問題的事情,但事實證明它是用於合併兩個基於同一文件的文件!儘管你的方法工作得很好!非常感謝你! – rivendell

相關問題