我開始工作主分支分支。大約一年前,我創建了另一個分支dev,其中我做了一些修改。從那時起,我繼續在開發分支上工作。現在我想將開發合併到主導致很多衝突。我想通過覆蓋主分支的內容來將開發者合併到主控中,即對於出現的任何衝突,我想保留開發者分支的代碼版本。如何做呢 ?git如何通過完全覆蓋主分支將分支合併到主分支
回答
你要使用的策略,這是使用-X標誌
git checkout master
git merge -X theirs dev
樹立了「用他們的合併」你可以用-X
開關指定the strategy option:
git checkout master
git merge -X theirs dev
有點說明。 -X theirs
的意思是:使用遞歸策略與合併但回退到其更改如果策略不能解決衝突。
這是-s ours
不同(因爲某些原因沒有-s theirs
),這將是一個貪婪的拿我們總是解決衝突。
git-merge(1)
合併策略部分對此提供了更深入的解釋。
可以強制推到主與所有你提交
git push -f origin master
由於Paulo Bu noted,GIT中提供了這種不同的方法,當你想用「我們」的方式合併,但只有一個「出來的盒子「,當你想要一個」他們「的方法合併。值得說明兩個舉例:
$ git merge -s ours deadbranch # merge deadbranch and ignore all its code
或:
$ git merge -X ours livebranch # merge livebranch but use ours when conflicting
也讓我在這裏指出,當您使用git merge
,Git會先找到「合併基地」,在該點兩個分支機構上次同步:
o - X <-- master
/
o - o - B
\
o - Y <-- otherbranch
這裏B
代表提交那就是合併基礎,X
是你分支的末端(master
)和Y
是另一個分支的提示。 git會做的是diff B
vs X
和B
vs Y
。
比方說,在 「我們的」 分支,master
,我們有文件unchanged
,no-conflicts
,和removed
。這些名字是關於其他兩個分支發生的事情。
文件unchanged
是不變的待合併分支(即,DIFF從B
到Y
顯示什麼都沒有文件unchanged
)。 git merge
永遠不會觸及它,所以無論我們給git merge
的參數如何,都不會改變。
其他文件在master
和/或其他分支中有一些變化。
文件no-conflicts
在master
的頂部有一處變化,在底部的另一處有一處變化。這兩個變化不衝突。 git merge -s recursive
將結合更改,無論您是否使用-X ours
選項。然而,git merge -s ours
將放棄其更改,保留我們的文件版本no-conflicts
。對於這個的情況,結果是不同的。
文件在主文件的頂部有一個變化,另一個分支的變化也在頂部。 (這些變化可能在任何地方,它們只是必須重疊。「在頂部」使它重疊。)這意味着這些變化是衝突的。使用git merge -s recursive
,您會收到投訴並必須解決衝突。添加-X ours
和git會採取你的改變,拋棄他們的改變。使用git merge -s ours
,git會把你的改變拋諸腦後 - 因此對於這個的情況,結果是一樣的。
文件removed
在master
中沒有變化,但在其他分支中被刪除。在這種情況下,git merge -s recursive
將刪除該文件,無論您是否使用-X ours
。但是,git merge -s ours
將忽略刪除。
總之,-s ours
和-s recursive -X ours
之間的區別是,同前,的git 完全忽略DIFF從B
到Y
;對於後者,git會嘗試組合差異B
- 至 - X
(我們)和B
- 至 - Y
(他們的),但是在組合期間發生衝突時,它會選擇B
至X
更改。
隨着-X theirs
(這是真的-s recursive -X theirs
),混帳嘗試製作diff結合起來,並在發生衝突的情況下,選擇在B
至 - X
變化B
至 - Y
變化。
這是可能實現的-s theirs
即使混帳沒有這個建在等價的。要做到這一點,使用git merge --no-commit otherbranch
,然後git rm -rf .
從頂層除去最後的合併結果(有或無衝突) ,然後從頂層git checkout otherbranch -- .
根據otherbranch
重新填充樹和索引。然後簡單地git commit
的結果。然而,這是非常罕見的,這就是爲什麼git沒有將其作爲內置策略。
- 1. Git:將分支合併到主分支或主分支
- 2. 合併更改蓋分支到主分支中的git
- 3. 切換主分支後git合併到主分支中
- 4. Git合併分支與主
- 5. 如果您將某個分支合併到主分支中,是否合併了分支覆蓋的差異?
- 6. 如何將未創建主分支到GIT中的主分支
- 7. git將分支合併到分支
- 8. VSTS合併的Git分支孫子到主後子分支已合併到主
- 9. 將分支合併到主幹。更改分支的主幹
- 10. 2分支主分支 - 合併分支1回到主分支並使用分支2中的代碼?
- 11. 如何將分支分支直接合併到主幹
- 12. 如何將開發分支合併到SourceTree中的主分支?
- 13. 合併分支'主'
- 14. Git:我應該如何將分支和分支分支變更爲主分支?
- 15. 將多個git分支合併爲主?
- 16. 合併的Git分支到主
- 17. 合併分支到主
- 18. git合併分支覆蓋目的地
- 19. Git如何合併原始回購的主分支到分支回購的主分支?
- 20. 將基於主題分支的分支的更改合併到git中的其他主題分支
- 21. Git&自動合併分支與主分支
- 22. Git新主分支
- 23. Git:如何合併/更新分支的部分從/到主?
- 24. 主人合併到工作分支即使我合併工作分支到主
- 25. 如何合併SVN分支到主幹?
- 26. https://bitbucket.org/xxx/yyy Git合併分支'主'
- 27. 從原始分支/主分支到本地主分支
- 28. Subversion - 將分支合併到主幹
- 29. 將SVN分支合併到主幹
- 30. 跨主分支合併?
什麼是-X在這裏? –
@hrehman策略選項。添加了一個鏈接供進一步參考。 –
在這裏要小心,'-X我們'或'-X他們'與''我們''是完全不同的。沒有「他們」。這聽起來像'-X他們'是OP想要的,所以我相信這是正確的答案(並提高了它)。 – torek