Подтвердить что ты не робот

Как автоматически разрешить конфликт Git, взяв версию в текущей ветке?

Предположим, что я получаю конфликт слияния на foo/bar.txt при выполнении этого:

$ git checkout A
$ git merge B

Я хотел бы автоматически разрешить конфликт, взяв foo/bar.txt из ветки A. (Я знаю, что делаю, и мне это нужно. Версия в ветке B неверна, и мне все равно о потере изменений в рабочем дереве в этом случае.) Кажется, что я могу сделать это, выполнив следующие команды:

$ git reset    foo/bar.txt
$ git checkout foo/bar.txt

Есть ли более простое решение с одной командой?

К сожалению, эти команды меняют foo/bar.txt, даже если конфликт отсутствует, и я не хочу этого. Если нет конфликта, я хочу сохранить foo/bar.txt в любом состоянии git merge B.

Итак, мне нужна команда оболочки Unix, которая обнаруживает, есть ли конфликт в foo/bar.txt, и если есть, он разрешит конфликт, взяв версию foo/bar.txt из текущей ветки. Он не будет делать ничего другого, то есть не будет изменять другие файлы, он не будет фиксировать изменения, и он не изменит foo/bar.txt, если в этом файле нет конфликта.

4b9b3361

Ответ 1

Если вы хотите сделать это как одноразовое, однолинейная команда:

$ 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 merge, чтобы навсегда игнорировать все восходящие изменения в локально измененном файле:

$ git config merge.pin.driver true
$ echo foo/bar.txt merge=pin >> .git/info/attributes

(true выше - это просто команда unix true, ее успех говорит о том, что локальная версия выглядела правильно, в этом случае ничего не делая для этого. Конечно, вы можете быть более сложными с вашими командами слияния.)

Я думаю, что вы не хотите merge --strategy=ours или --strategy-option=ours, это относится ко всем слияниям.

Ответ 2

Вы можете указать стратегию слияния ours в стратегию слияния recursive (по умолчанию). Он будет выполнять нормальное слияние, но в случае возникновения конфликтов ханки выберет версию текущей ветки.

git checkout A
git merge -Xours B