2014-10-16 64 views
2

我想在新的初始提交之上重新整理我的整個git歷史記錄,以便將其推送到SVN。無法重定義包含已解決的合併衝突的分支

我不明白的是爲什麼我必須再次解決相同的合併衝突。他們曾經在原始歷史中解決過,爲什麼不能僅僅採用這些解決方案呢?

我已經發表了minimal git-repository來重現問題:

git clone https://github.com/martinsson/merge-conflict-reappears-in-rebase.git 
git checkout yoda 
git rebase master 

Image of the history

我知道的git rerere的,但它似乎將不得不在這些衝突將被激活首先解決。從理論上講,我可以激活它,解決衝突,然後用它來解決衝突,但在實踐中,解決衝突似乎幾乎不可能與原始衝突解決相同。

我知道我可以推動一切到SVN,使用合併或git嫁接。但是這違背了將提交日誌移植到SVN的目的。

+0

約翰 - 你想樹合併,或只是根源變化?如果前者,那麼我認爲'rebase'就是你想要的命令。 'filter-branch'似乎更有可能。 – 2014-10-16 15:33:25

+0

不知道我可以使用filter-branch。然而,我無法做到這一點,我做了什麼。 'echo「8281b521 145c1aa」>> .git/info/grafts'。 'git filter-branch -f --tag-name-filter cat - --all'。 'git svn dcommit'。然後我得到'無變化 3147a479889ef4c88a00bd7f01cc0764930b9f90〜1 == 3147a479889ef4c88a00bd7f01cc0764930b9f90 無法從提交5bba77149399ab4d3600f642af63a43620d06fa0〜1'提取修訂信息。合併提交不會被推送並且dcommit停止。 [b4推送](https://www.dropbox.com/s/i7sh5i3jgymbvco/Screenshot%202014-10-17%2010.07.28.png?dl=0) – 2014-10-17 08:10:51

+0

[推送後的狀態](https:// www .dropbox.com/s/z22qn82vgt6r22q /截圖%202014-10-17%2010.15.50.png?dl = 0) – 2014-10-17 08:16:54

回答

1

重新命令重新申請所有更改由目標頂部的每個提交表示。 這就是爲什麼所有的衝突似乎都在重現。

如果您想將項目的當前狀態作爲「乾淨」(新)提交推送到SVN,只需將其檢出並將所有文件推送到SVN即可。 如果你想保存歷史,那麼爲什麼Rebase?

+0

我的印象我不能承諾一個空的svn存儲庫。因此,我需要在單個無根提交之上進行重新綁定。 *'johan $ git svn init svn:// localhost /' *'johan $ git svn fetch' *'johan $ git svn dcommit無法確定HEAD歷史記錄中的上游SVN信息。也許庫是空的。在/usr/local/Cellar/git/1.8.4/libexec/git-core/git-svn第856行。 – 2014-10-16 15:10:35