Внесите изменения в более чем одну ветку в Git - PullRequest
5 голосов
/ 06 октября 2009

Типичный сценарий использования:

У меня есть master, branch_foo и branch_bar. Все в курсе. Теперь я делаю «мастер проверки git» и работаю над исправлением ошибки.

Допустим, что исправление было в отслеживаемом файле, который находится в одном и том же состоянии во всех ветвях - т.е. перед исправлением различия в файлах из каждой ветви не приводят к различиям.

Есть ли способ зафиксировать это исправление во всех ветвях?

Ответы [ 3 ]

9 голосов
/ 06 октября 2009

Общий подход к этому - «слияние вверх». От man gitworkflows:

Всегда фиксируйте свои исправления в самой старой поддерживаемой ветке, которая требует их. Затем (периодически) объединяйте ветви интеграции друг с другом.

Это дает очень контролируемый поток исправлений. Если вы заметили, что применили исправление, например, к мастер, который также требуется в maint, вам нужно будет выбрать его (используя git-cherry-pick (1)) вниз. Это случится несколько раз, и вам не о чем беспокоиться, если вы не делаете это очень часто.

Первый метод, конечно, предпочтителен - хорошо, что коммит в репо будет только один раз, и вы сможете увидеть историю его попадания в каждую ветку. Однако жизнь не идеальна, и вы иногда попадете во вторую категорию. Если такая ситуация станет достаточно распространенной, возможно, вы могли бы написать скрипт типа

.
multi-cherry-pick <commit> <branch> [<branch>...]

, который проверяет каждую ветку по очереди и выбирает данный коммит.

5 голосов
/ 07 октября 2009

Да, есть. Сделайте этот коммит в отдельной ветке темы (функции) (ответвление от самой старой ветки / самого раннего состояния), а затем объедините эту ветку темы в любую ветку, какую хотите.

Этот рабочий процесс описан, например, в Никогда не сливаясь обратно пост в блоге Junio ​​C Hamano (сопровождающий Git).

Это примерно то, что Джефроми написал написал

5 голосов
/ 06 октября 2009

Я ожидаю git cherry-pick - это то, что вы хотите.

После внесения исправления в первую ветвь вы можете использовать git cherry-pick, чтобы объединить его с каждой из других ветвей.

Этот связанный вопрос по SO может представлять интерес: Git & Working на нескольких ветвях

...