artzub
@artzub
Программист

Слияние 2 ветвей Git?

Привет всем!

Дано:

1. Репозиторий Git.

2. Проект в котором есть 2 ветви:
v2 — в ней произведены и закомитеный изменения в 3 файлах. Предположим что в первом это строка 10, во втором 5, в третьем 6.

master — произведены изменения в этих же 3 файлах в тех-же строках, но при этом они тоже нужны.
3. Конфликт при слиянии между master и v2.
Задача:

1. Каким образом разрешить конфликт?

2. Есть ли способ взять изменения из v2 только из интересуемых строк и файлов и применить их к master
  • Вопрос задан
  • 6835 просмотров
Решения вопроса 1
@VlK
Правильно в вашем случае будет

1) git rebase master

из вспомогательной ветки. Вероятно, шаг включает разрешение возможных конфликтов.

2) git rebase -i HEAD^^^

из вспомогательной ветки. Собираем несколько коммитов вспомогательной ветки в один (опционально, но часто для аккуратного оформления коммитов требуется)

3) git merge secondary-branch --ff-only

из главной ветки. Мержим с fast-forward (то есть уже без решения конфликтов) новые коммиты из вспомогательной ветки

То есть вы сначал внесете изменения из главной во вспомогательную ветку, а потом включите новые коммиты из вспомогательной в главную.

Иногда имеет смысл сделать git rebase -i вспомогательной ветки на саму себя, чтобы объединить ряд коммитов в один.

Если коротко. Хорошей практикой считается отсутствие коммитов слияния в главной ветке.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
whitequark
@whitequark
Увы, но если git не смог сам разрешить конфликт, то однозначно сделать это автоматически нельзя.

Взять только нужные изменения можно, если просто скопировать дерево v2 поверх дерева master, а потом записать только нужные изменения при помощи git add --interactive. Все же ненужное затем убирается через git checkout ., который сбросит состояние рабочего каталога в индекс (все, что добавилось через git add, останется).
Ответ написан
NYMEZIDE
@NYMEZIDE
резюме - ivanfilatov.ru
все можно сделать через diff
запускаете, сравниваете, выбираете что взять и откуда.
даже есть графическая оболочка входящая в TourtoisGIT
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы