2017-07-27 38 views
3

git rebase典型的行爲是一個相對「乾淨」從基地到當地的合併。的Git重訂造成本質上的所有文件合併衝突 - 甚至那些不變

但是偶爾事情南下。基本上文件已被觸摸的基地需要手動合併到本地 - 無論文件是否已被觸及/本地更改

爲什麼會發生這種情況?有沒有合理的解決方法?

更新

出於某種原因,在此情景

git pull 

工作就好。它需要的一個文件手動合併 - 這是一個有效手動合併。

所以我想這個問題有演化成「什麼是一個git pull被要求相對於git rebase條件的感覺。我會尋找適用的Q & A.

+0

作爲VonC注意到他(編輯)答案,拉運行'git的merge'而不是'混帳rebase'。如果有N個承諾變基,衍合有相同數量的「痛」的身份參與運行的N個獨立的合併,而合併運行得* *一個合併。所以從某種意義上說,合併從根本上來說更簡單。 Rebase通常更好,但並不總是更好。你可以告訴'git的pull'來運行'git rebase',但我建議避免'混帳pull'完全:使用'git的fetch',然後選擇* *合併VS底墊的基礎上,你有什麼VS你剛纔通過獲取了。 – torek

+0

@torek在這種情況下,「merge」顯然是我想要的:實際上「rebase」工作更好?隨意添加另一個答案。 – javadba

+0

Rebase不是*更好*,也不*更糟*。它只是*不同*。請參閱相關問題https://stackoverflow.com/q/45345564/1256452(重新分配多個分支機構)和我的答案的下半部分,這更關注「爲什麼選擇合併或重新分配」。 – torek

回答

3

一個可能的原因是EOL(行)字符結束,這可能是兩個分支之間的不同。

退出第一次巡迴演出電流變基(因爲Git 2.12: git rebase --quit

與選項(合併策略)-X ignore-space-at-eol再試一次衍合,看看問題PERSI STS。


混帳拉作品就好

即拉之間的差值(取+合併)和變基(重播提交)

x--x--x--x--X  (master) 
     \ 
     --o--o--O (origin/master) 

上拉將合併兩個HEAD提交XO誰可能不同之處僅在一個文件中。

x--x--x--x--X-----M  (master after git pull) 
     \  /
     --o--o--O (origin/master) 

衍合(或混帳拉--rebase)將重播原產/主的頂尖高手,和以前的「x」承諾可能會帶來很多的衝突,即使X(HEAD)只從一個不同來自原始文件HEAD O的文件。

x--x--x 
     \   
     --o--o--O--x'--X' (master) 
      (origin/master) 
+0

我更新了OP:'git pull'在這種情況下效果很好 - 所以我需要做一些功課來了解他們工作流程的差異。 – javadba

+0

@javadba yes:兩個分支HEAD提交之間的合併,而不是從一個分支到另一個分支的所有提交。 – VonC

+0

你可以添加到你的答案的身體,也許更多的上下文? – javadba