1. 程式人生 > >Git - Merge: refusing to merge unrelated histories

Git - Merge: refusing to merge unrelated histories

場景

我在本地有個程式碼倉庫local-A,本地倉庫local-A已經和一個遠端倉庫remote-A關聯了。

接著我又在GitHub上新建了一個倉庫remote-B,我希望將本地倉庫local-A的本地dev分支push到這個新建的遠端庫remote-B。我的想法是這樣的:

  1. 在本地倉庫local-A裡新增剛剛新建的遠端庫remote-B
  2. 檢出(check out)並切換到remote-B的master分支
  3. 將本地dev分支merge到當前的master分支
  4. 解決可能發生的衝突後,將改動全部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歷史。

參考連結