Я ищу команду git, которая выполнит слияние другой ветки (например, разработки) с моей:
Я пробовал использовать такие команды, как git merge -s ours
, но затем мои изменения принимаются во всех конфликтах. И я не этого хочу. Если, например, версия пакета, который я не менял, была обновлена в ветке, которую я объединяю со своей, я, очевидно, хочу, чтобы этот пакет был обновлен.
Любая помощь здесь очень ценится!
Да, и в этом случае - что Git не может разрешить те изменения, которые я хочу использовать для своей версии файлов.
Возможный дубликат Как отдать предпочтение файлам из одной ветки при слиянии?
Что касается второй части вашего вопроса, да, что-то подобное можно сделать, но почти наверняка ответ на него будет дан раньше где-нибудь в Stack Overflow. Покопайтесь минут 5-10, и я уверен, что вы что-нибудь найдете.
Я уже 2 часа ковырялся и не нашел команду, которая хорошо работает с моими изменениями. Мой обычный сценарий состоит в том, что я обновил некоторые пакеты самородков, а другие были обновлены при разработке. И у меня куча конфликтов слияния.
git merge -s recursive -X ours
пробовали?
Кажется, я нашел два дубликата за очень короткий промежуток времени. Есть ли причина, по которой эти варианты вам не подходят?
Нет, -s ours
не просто принимает ваши изменения во всех конфликтах. -s ours
на самом деле не выполняет что-нибудь с конфликтами, он отбрасывает все изменения, внесенные другой стороной, и просто забирает ваш все дерево. Похоже, что слияние было выполнено, но код другой стороны не сливается вообще, он отбрасывается. Это невероятно опасная команда, и, как вы заметили, это не то, что вам нужно. (Я хотел прояснить, что делает делает для будущих читателей, которые, возможно, захотят попробовать его использовать.)
Спасибо Эдварду Томасу за разъяснения. Это действительно полезно. Можете ли вы мне сказать, что именно тогда делает git merge -s рекурсивный -X наш?
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.
Я думаю, вы не можете делать именно то, что хотите. Всегда могут быть конфликты, с которыми Git не может понять, как справиться, и в этом случае вам абсолютно необходимо разрешить их вручную.