簡體   English   中英

如何通過獲取當前分支中的版本來自動解決Git沖突?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM