2011-09-26 82 views
2

我已經創建了一個存儲庫,只需在某個點檢出上游版本即可創建存儲庫。我知道它來自的確切提交。從另一個分支遷移提交,沒有公共父項

現在有沒有簡單的方法來合併剩餘的提交?我怎麼能做到「在xyz之後合併所有東西」,而不必在提交之前忽略缺少的公共歷史記錄?

+0

你可以做git rebase來做到這一點 –

+0

@KitHo你可以發佈實際的命令嗎? – viraptor

回答

2

git format-patch ancestor..HEAD on the source repo,and git am on the target repo would be work。

+0

出於某種原因,我在此之後發生衝突。瀏覽回購發現問題... – viraptor

+0

我做了'format-patch hash_I_have..last_has',但隨後路徑上出現合併,git嘗試將修改兩次應用於同一個文件。 – viraptor

+0

你的意思是說這兩個回購券之間已經合併了?或者其他一些合併本地到源回購?或者是其他東西? – Useless

1

針對這個問題的一個很好的解決方案是使用git的「移植」機制,該機制專門用於拼接不同的歷史。這裏也有一些解釋在這裏:

...和一個不錯的教程在這裏:

由於這些鏈接提示,你可能會想使用git filter-branch添加嫁接後重寫您的歷史記錄,使其他人可以克隆完整的歷史記錄,包括嫁接的所有內容。(雖然這應該有關於重寫歷史記錄的常見警告)。

1

這裏的一個選擇是將您的工作重新分配到您分支的存儲庫的當前HEAD之上。

git rebase什麼是git rebase會讓你的分支回到共同的祖先,然後快速轉發你重新分配的分支上的所有新提交,並最後嘗試依次應用你的每個提交,直到你有一個提交線性歷史記錄包括其他分支的所有內容,然後是您自己的所有工作。

警告:絕對不要重新組織分支,您已將您的狀態與其他人或其他分支共享,並且您關心保持該關係:這基本上會重寫歷史記錄,並創建與現有關係無關的全新提交。有關重新貼牌的更多信息,請參閱here:我建議您在繼續之前閱讀該頁面。

了這番解釋一點,你會做到以下幾點:

git remote add source git://host.that.has.source/repo 
git fetch source 
git rebase source/master 

我在這裏做了一些假設。

  • ,你必須訪問原始資料庫:你需要,因爲你做你原來的分支這個工作要導入的所有提交。

  • 您想與該存儲庫的主分支保持同步:如果要使用不同的分支,請將您想要分配的遠程分支的名稱替換爲「主」字(git branch -r以查看商場)。

注意:當您運行rebase命令時,您可能會遇到需要解決衝突的情況:以正常方式執行此操作。

如果您在之前的櫻桃挑選或合併且正在導致衝突的評論中提到的提交,應該可以安全地假設代碼的上游副本勝過您的版本:當git嘗試應用提交併遇到錯誤,則可以使用git reset --hard HEAD,然後使用git rebase --continue來使用它們的版本。

+0

儘管如此,使用rebase將線性化所有正在重新應用的歷史記錄。您可以使用'--preserve-merges'參數來重新設置以試圖解決這個問題,但我不確定在實踐中效果如何。 –

相關問題