#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 фиксации, значит, что-то не так.