Как объединить один коммит?
Иногда я работаю сразу с несколькими ветвями. Скажем, у меня есть ветки с именем master, release-1.1 и экспериментальные. Я создаю новый файл или делаю изменения в экспериментах, и я хочу, чтобы одно единственное изменение применимо к другим ветвям.
Могу ли я сделать это в git? Если я просто объединить фиксацию в другую ветвь, git автоматически "быстро вперед" и включает любые коммиты между ними. Но должен быть какой-то способ справиться с этим прецедентом.
Ответы
Ответ 1
Что вы хотите сделать, называется выбор вишни. Вы можете выбрать один фиксатор, используя следующую команду:
$ git cherry-pick <commit hash or name>
Это будет включать изменение от этой фиксации только в вашу текущую ветку. Обратите внимание, однако, что это создает новую фиксацию; этот новый коммит имеет те же самые изменения, что и выбранная вишня (и даже одна и та же дата фиксации и автор), но это технически новая фиксация, поэтому вы увидите ее как новую фиксацию, например, gitk
, Вам также нужно будет выполнить выбор вишни для каждой ветки, в которой вы хотите увидеть изменение.
Ответ 2
Решение, но, к сожалению, то, что вам нужно знать перед внесением изменений, заключается в создании отдельной ветки только для этого изменения (так называемая " ветвь темы" ), с самой ранней ветки или самое раннее совершение, которое имеет смысл, и объединить эту ветвь в любую ветвь, которая нуждается в этой фиксации.
В некоторых случаях другим решением может быть внесение изменений в ветки обслуживания, ветвление поддержки слияния в стабильную ветвь и объединение стабильной ветки в ветку разработки.
Junio C Hamano (Git supporter) написал об этом в своем блоге: Устранение конфликтов/зависимостей между ветвями ветвей раньше