[英]How to automatically resolve a Git conflict by taking the version in the current branch?
假設我在運行這個時在foo/bar.txt
上遇到合並沖突:
$ git checkout A
$ git merge B
我想通過從分支A獲取foo/bar.txt
來自動解決沖突。(我知道我在做什么,我確實需要這個。分支B中的版本是錯的,我不關心在這種情況下丟失工作樹中的更改。)似乎我可以通過運行以下命令來執行此操作:
$ git reset foo/bar.txt
$ git checkout foo/bar.txt
是否有更簡單的單命令解決方案?
不幸的是,即使沒有沖突,這些命令也會改變foo/bar.txt
,我不希望這樣。 如果沒有沖突,我想要保持foo/bar.txt
在任何狀態git merge B
離開它。
所以我需要一個Unix shell命令,它會檢測foo/bar.txt
是否存在沖突,如果有,它將通過從當前分支foo/bar.txt
的版本來解決沖突。 它不會做任何其他事情,即它不會修改其他文件,它不會提交更改,如果該文件中沒有沖突,它也不會更改foo/bar.txt
。
您可以為recursive
(默認)合並策略指定ours
的合並策略選項。 它會進行正常的合並,但如果出現沖突,則會選擇當前分支的版本。
git checkout A
git merge -Xours B
如果要將其作為一次性執行,則單行命令為:
$ git checkout --ours foo/bar.txt # <-- resets it only if the merge found conflicts in this file
$ git checkout HEAD -- foo/bar.txt # <-- resets it to that specific version no matter what
配置git的合並以永久忽略對本地更改的文件的所有上游更改:
$ git config merge.pin.driver true
$ echo foo/bar.txt merge=pin >> .git/info/attributes
( true
以上僅僅是Unix的true
命令,它的成功說,它所做的本地版本期待權,在這種情況下,什么也不做吧。當然,你可以讓你的合並命令更復雜。)
我認為你不想merge --strategy=ours
或--strategy-option=ours
,那些適用於整個合並。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.