場景
我在本地有個代碼倉庫local-A,本地倉庫local-A已經和一個遠程倉庫remote-A關聯了。
接着我又在GitHub上新建了一個倉庫remote-B,我希望將本地倉庫local-A的本地dev分支push到這個新建的遠程庫remote-B。我的想法是這樣的:
- 在本地倉庫local-A里添加剛剛新建的遠程庫remote-B
- 檢出(check out)並切換到remote-B的master分支
- 將本地dev分支merge到當前的master分支
- 解決可能發生的沖突后,將改動全部commit並push到遠程庫remote-B的master分支上
接着當我做到第三步的時候,發現報錯如下:
Merge: refusing to merge unrelated histories
看到報錯,我又重新操作了一遍,依然是同樣的錯誤。記得以前我也做過類似的操作,但是卻沒有現在的問題,百度了下,發現可能是git升級之后造成的。
解決方案
因為兩個倉庫是不同的項目(本地倉庫已經跟蹤了另外一個遠程庫了),git默認不允許不相干的項目進行push等操作。如果想要進行這些操作,就需要加入--allow-unrelated-histories參數才可以合並兩個不同的項目:
git merge --squash dev --allow-unrelated-histories
這句命令表示將dev分支合並到當前分支,這里的兩個本地分支各自追蹤不同的遠程庫,需要加入--allow-unrelated-histories參數才能夠完成合並操作而不報錯,至於--squash參數是為了壓縮dev分支原本的commit歷史,可以將原本所有的commit歷史合成一個commit,以避免當前分支在合並之后摻入了其他項目的commit歷史。
