簡體   English   中英

合並兩個類似的Git存儲庫?

[英]Merge two similar Git repositories?

我有兩個存儲庫,其中一個是另一個的克隆。

從本質上講,發生的事情是創建了第一個存儲庫(A),然后進行了工作並生成了一堆歷史記錄,然后通過文件復制的方式獲取了克隆,但未創建分支。 復制的倉庫(B)進行了更改和提交,而第一個倉庫(A)進行了更改和提交。

現在,我需要將兩個存儲庫重新合並為一個,以便在必要時將所有更改都與沖突解決合並。

我該怎么辦?

沒有創建分支不是一個大問題。 如果您有共同的提交,那么它應該很容易。

首先找到常見的提交

從A創建一個新分支,它應該指向存儲庫A的HEAD。合並時,它將自動找到它實際分支的位置。 我們將HEAD保存在另一個分支中以合並到一個isolate分支中。 如果您搞砸了,那么提交的原始分支仍然可用,您可以簡單地刪除帶有混亂合並的分支。

在進行任何合並之前,我通常會保存原始提交的干凈分支。 我在另一個分支上工作,可以將其移動(重置)到任何位置,然后在工作完成后移動。 我用合並的分支替換了原來的分支。 您可以將其視為檢查點。 如果你弄亂了。 返回檢查點,然后重新開始。 如果您的合並非常復雜,則可以保存任意數量的檢查點。 您只需要稍后清理即可。

git checkout -b "MergeAB"

其次,您必須將代碼從存儲庫B放入A

通常應該可以從B中獲取,其中“ ../B”是B存儲庫的路徑。 它將在名為“ FETCH_HEAD”的分支中獲取。

git fetch ../B

From ../B
* branch            HEAD       -> FETCH_HEAD

第三合並

只需將FETCH_HEAD分支合並到您的工作分支中,然后合並成功即可。 您可以將原始分支重置為MergeAB分支,然后刪除MergeAB

git merge FETCH_HEAD

最后

解決沖突

注意:

我不太確定,但是將B合並到A中可能會產生與將A合並到B中不同的結果。我知道,當某些更改以不同的順序出現時,合並可能會很困難。 更改后某人將舊文件復制到其存儲庫中。 在新更改之后提交的舊文件可能最終看起來像更改已還原為舊版本。

我首先寫了使用reset但這不是必需的。 如果您由於任何原因丟失了最后一次提交。 這可以幫助您找到它。

git fsck --lost-found | grep commit | cut -f3 -d" " | xargs -n1 git log -n1

它會顯示所有“懸掛”提交的日志(無分支)。 即使提交看起來可能已刪除。 應該可以在任何具有“哈希值”的良好觀看者中看到它們。

在合並兩個存儲庫的情況下,就像一個是另一個存儲庫的修改副本。 您可以使用諸如meld工具,使事情變得非常簡單。 只需將兩個文件夾都添加到工具中,然后將其作為標准文件夾即可。 它具有非常簡單的選項,可以包含更改並通過單擊將內容推送到一端。 這樣可以確保您所有的更改都不會丟失,並且可以進行很好的比較。 在此處輸入圖片說明

長時間后需要合並兩個分支時,請使用rebase而不是merge。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM