Git merging - разрешить конфликт, используя мои изменения

Я ищу команду git, которая выполнит слияние другой ветки (например, разработки) с моей:

  1. автоматическое разрешение конфликтов,
  2. при возникновении конфликтов, которые невозможно разрешить автоматическим слиянием, беру мою версию изменений.

Я пробовал использовать такие команды, как git merge -s ours, но затем мои изменения принимаются во всех конфликтах. И я не этого хочу. Если, например, версия пакета, который я не менял, была обновлена ​​в ветке, которую я объединяю со своей, я, очевидно, хочу, чтобы этот пакет был обновлен.

Любая помощь здесь очень ценится!

Я думаю, вы не можете делать именно то, что хотите. Всегда могут быть конфликты, с которыми Git не может понять, как справиться, и в этом случае вам абсолютно необходимо разрешить их вручную.

Tim Biegeleisen 31.10.2018 13:48

Да, и в этом случае - что Git не может разрешить те изменения, которые я хочу использовать для своей версии файлов.

Marta 31.10.2018 13:49

Что касается второй части вашего вопроса, да, что-то подобное можно сделать, но почти наверняка ответ на него будет дан раньше где-нибудь в Stack Overflow. Покопайтесь минут 5-10, и я уверен, что вы что-нибудь найдете.

Tim Biegeleisen 31.10.2018 13:50

Я уже 2 часа ковырялся и не нашел команду, которая хорошо работает с моими изменениями. Мой обычный сценарий состоит в том, что я обновил некоторые пакеты самородков, а другие были обновлены при разработке. И у меня куча конфликтов слияния.

Marta 31.10.2018 13:53

git merge -s recursive -X ours пробовали?

L3viathan 31.10.2018 13:53

Кажется, я нашел два дубликата за очень короткий промежуток времени. Есть ли причина, по которой эти варианты вам не подходят?

Liam 31.10.2018 13:54

Нет, -s ours не просто принимает ваши изменения во всех конфликтах. -s ours на самом деле не выполняет что-нибудь с конфликтами, он отбрасывает все изменения, внесенные другой стороной, и просто забирает ваш все дерево. Похоже, что слияние было выполнено, но код другой стороны не сливается вообще, он отбрасывается. Это невероятно опасная команда, и, как вы заметили, это не то, что вам нужно. (Я хотел прояснить, что делает делает для будущих читателей, которые, возможно, захотят попробовать его использовать.)

Edward Thomson 31.10.2018 16:16

Спасибо Эдварду Томасу за разъяснения. Это действительно полезно. Можете ли вы мне сказать, что именно тогда делает git merge -s рекурсивный -X наш?

Marta 02.11.2018 08:08
1
10
186
1

Ответы 1

Can you tell me what exactly git merge -s recursive -X ours do then?

Во-первых, в случае трехстороннего слияния рекурсивная стратегия по умолчанию.
-X ours будет опцией, переданной этой конкретной стратегии.

Как и проиллюстрировано здесь, наш вариант будет применяться только в случае конфликта:

This option forces conflicting hunks to be auto-resolved cleanly by favoring our version. Changes from the other tree that do not conflict with our side are reflected to the merge result. For a binary file, the entire contents are taken from our side.

This should not be confused with the ours merge strategy, which does not even look at what the other tree contains at all. It discards everything the other tree did, declaring our history contains all that happened in it.

Другие вопросы по теме