У меня две ветки от мастера, каждая для другой функции, а затем у меня есть ветвь синтеза, которая объединяет эти два. Я совершил что-то для ветки синтеза, но теперь я вижу, что я бы скорее применил это изменение к одной из ветвей, относящихся к этой функции. Есть ли способ сделать это неприменимо/применить где-нибудь еще маневр с помощью git?
В git, как удалить фиксацию из одной ветки и применить ее к другой ветке?
Ответ 1
Передача черри-pick для целевой ветки и ветвь источника reset. Предполагая, что вы хотите перенести последнюю фиксацию с ветки source
на target
, выполните:
git checkout target
git cherry-pick source
git checkout source
git reset --hard source^
Если коммит не был последним, вам нужно будет использовать git rebase -i
вместо последней команды и выбрать определенное имя фиксации для cherry-pick
.
Ответ 2
Как правило, когда я делаю что-то подобное, я буду:
- Создайте обратный файл патча с помощью git diff (например,
git diff HEAD^ HEAD
) - Применить этот обратный патч к ветке. Я хочу удалить это изменение.
- Отправляем ветку. Я хочу, чтобы изменения на
- Используйте
git cherry-pick
, чтобы применить применимую фиксацию
Я считаю, что есть более простой способ, но я предпочитаю это, потому что я лучше использую (и помню) команды diff/cherry-pick