Подтвердить что ты не робот

Как выполнить резервное копирование фиксации в git?

Итак, у меня есть ветвь обслуживания и главная ветвь в моем проекте. Если я делаю фиксацию в ветки обслуживания и хочу объединить ее вперед к ветки мастера, это легко:

git checkout master; git merge maintenance

Но если я хочу пойти наоборот, то есть применить фиксацию, сделанную для возврата обратно в мою ветку обслуживания, как мне это сделать? Рассматривается ли это вишневый сбор? Это вызовет проблемы или конфликты, если я снова объединить ветвь обслуживания?

4b9b3361

Ответ 1

Это пример использования git-cherry-pick

git checkout maintenance
git cherry-pick <commit from master>

Ответ 2

Альтернативное решение для использования " git cherry-pick" (как рекомендовано в других ответах) было бы создать отдельную ветку [topic] для ветки исправления off, и сначала слейте эту ветвь в ветку обслуживания, затем в основную ветвь (trunk).

Этот рабочий процесс (несколько) описан в Устранение конфликтов/зависимостей между ветвями тем раньше blog post by Junio ​​C Hamano, git supporter.

Результат получения черри в дублированном фиксации, который по строке может вызвать проблемы при слиянии или перезагрузке. В потоковом режиме на основе отраслевых ветвей хранится только одна копия исправления.

Ответ 3

Да, это считается вишневым и нет, обычно это не должно вводить проблем. Если фиксация не применяется чисто при обратном переносе, вы можете столкнуться с тем же конфликтом, когда вишневый выбор его обратно.

Ответ 4

Как правило, я использую merge для перемещения изменений вверх по дереву (от обслуживания до мастера) и rebase, чтобы переместить их "вниз" по дереву (от мастера к техобслуживанию). Это значит, что порядок фиксации в основной ветке сохраняется.

Rebase по существу отбрасывает все ваши изменения в текущей ветке на fork (или последнюю rebase), копирует более новые изменения и затем повторно применяет ваши изменения.

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

Ответ 5

Для сложных коммитов, которые нельзя применить с помощью git вишневого забора, вы можете попробовать

git checkout -b merge-branch master
git rebase --onto=`git merge-base master maintenance` HEAD~1 && git rebase master

Разъяснение: http://blog.boombatower.com/automatically-backport-commits-using-git.

Ответ 6

Как уже отмечали другие, выбор вишни - лучший вариант. Я просто хотел добавить, что конфликты во время сбора вишни часто могут быть решены путем изучения "зависимостей" фиксации, которую вы выбрали на вишне, и что я построил инструмент под названием git-deps для обнаружения и визуализации этих зависимостей. Если вы заходите на главную страницу, вы увидите два видеоролика YouTube: первое дает общее введение в инструмент, а второе демонстрирует, как его можно использовать, чтобы избежать конфликтов при наборе вишни.