2017-06-19 131 views
0

奇怪的是,有以下步驟合併衝突:如何處理`git pull upstream branch_name`時出現衝突時的GitHub情況?

  1. 我分叉回購foo在GitHub上
  2. git clone這個叉式回購到我的硬盤驅動器
  3. 3天后,有人犯下了大量的代碼分支xyz
  4. 因此,爲了使分支正好在我的分叉回購一樣,我再次git clone從分叉回購到一個新的文件夾bar
  5. cd bar
  6. git remote add upstream <the URL for foo>
  7. git pull upstream xyz

和成噸的合併衝突的出現。我從來沒有碰過任何分支xyz。這是另一個開發人員在xyz中投入了很多東西,因此xyz分支應該只更新所有更改,而不是合併衝突。後來他說,它已經合併衝突,因爲他git push -f,如果他從來沒有使用-f,那麼它不應該合併衝突。

這種情況如何解決?

+0

也許在兩個GitHub回購分支分歧? –

+0

'我再次從...克隆克隆爲什麼你要克隆_again_,當你需要做的只是'git pull'?你是否與Git合作很新? –

+0

我在問題中添加了一句話:「我再次從分叉回購克隆到新文件夾'bar'」。我已經使用了很多git,但是我通常不使用分叉的回購,但是直接使用原始回購 –

回答

0

你應該打破pull分割成一個fetch然後merge

git fetch upstream xyz git merge upstream/xyz

那麼你就必須要解決的矛盾。

+0

您確定...我聽說取回然後是合併,與拉取相同。 ..使用該分支的原始人告訴我,由於他使用了'git push -f',因此存在衝突 –

0

後來他說,它有合併衝突,因爲他git push -f,如果他從來沒有使用過-f,那麼它應該不會有合併衝突。

這是正確的。

假設原來xyz分支看起來單純的喜歡

A --- B --- C --- D 

也就是說,有四個提交,D是最近的。這是你克隆的。

現在,其他人力推動,使回購是這樣的:

A --- B --- C --- E 

也就是說,提交D已被刪除,並提交E已添加。考慮當你再運行git fetch會發生什麼:

A --- B --- C --- D <-- local xyz branch 
      ` 
       `--- E <-- remote xyz branch 

完成上述操作後,就沒有辦法來確定提交D最初從遠程分支機構來了。它與您在本地創建的提交無法區分,因此,您的後續git merge會嘗試保留其內容。

在這種情況下,您希望完全忽略D,您只需要到Egit reset --hard E將執行此操作。你可以用任何常用的方式參考E,這裏最適合我的似乎是git reset --hard @{upstream}