Как правильно настроить Git на автоматическое принятие конфликтов слияния в нетронутых файлах

#git #merge #merge-conflict-resolution

Вопрос:

Я начинаю с того, что отсекаю ветвь функции master . Допустим, эта ветвь названа feature . У нас также есть development филиал, который в настоящее время опережает на 5 коммитов master .

Когда я заканчиваю свою ветвь функций, я делаю ее красивой , так что впереди всего 1 коммит master (используя перебазирование git rebase -i HEAD~X , где X указано количество сделанных мной коммитов), а затем объединяю ее development для тестирования.

Для этого я использую git checkout development и то git merge --squash feature , и другое . Я вижу 10 конфликтов слияния. Файлы, которые я изменил feature , я вижу в этих конфликтах, но я также получаю изменения этих 5 других коммитов (потому development что было уже 5 коммитов впереди master ).

Например, допустим, я только изменил файл A feature . Когда я выполняю слияние development , я вижу конфликты для файлов A , B , C , и D ( B D уже существующие изменения development , которых у меня нет feature ).

Я хотел бы, чтобы Git автоматически принимал эти конфликты слияния (автоматически принимал текущие) в файлах , которые я не трогал ( B , C , и D ), и показывал мне конфликты только в файлах, которые я изменил ( A ). Возможно ли это?

Из раздела «Расширенное слияние» в git-scm я вижу, что могу передавать флаги типа -Xours » и -Xtheirs » при выполнении слияния, но не похоже, что я могу применить их непосредственно к файлам так, как я хочу.

Комментарии:

1. Если после того, как ваша интерактивная перебаза скомкана в один коммит , ваша ветвь feature опережает только один коммит master и опережает development 5 коммитов master , то в чем смысл merge --squash ? (Это уже одно обязательство.) Что касается возникновения конфликтов для файлов, не включенных в вашу единственную функцию фиксации — вы уверены? Если вы случайно включили слишком много коммитов в свой интерактивный сквош для перебазирования, вы потенциально можете получить конфликты при объединении. Если вы посмотрите на все изменения в вашем 1-м коммите, можете ли вы подтвердить, что внесены только изменения A ?

2. Предполагая,что вы правы , что feature у вас только одна фиксация с изменениями A , попробуйте выполнить следующую команду: git log development..feature (там 2 точки). Результатом этого должна быть только ваша одна функция фиксации. Если вы получаете более 1 фиксации, значит, что-то не так.