(git): Как выполнить конкретную фиксацию из ветки вверх по течению?

У меня есть это (git repo):

A--B--C--D ->master
   \--E    ->dev

И я хочу передать только commit D в ветвь dev (D не зависит от C), так что:

A--B--C--D  ->master
   \--E--D' ->dev

Но D 'не следует добавлять к хозяину после слияния:

A--B--C--D--E' ->master
   \--E--D'/   ->dev

Это связано с тем, что я хочу только обновить файл, не загрязняя dev новыми файлами, которые добавляет C (который представляет другое, большое слияние).
Я предполагаю, что мне нужно использовать git rebase, но я не могу догадаться, как это сделать.

Ответ 1

Вы хотите использовать git cherry-pick. Я предполагаю, что ваш пульт называется "origin" (но замените реальное имя удаленного репо "origin"). Я предполагаю, что у вас есть две локальные ветки, также называемые master и dev. Я предполагаю, что коммит D находится на origin/dev. Вы можете выбрать D с помощью следующего:

$ git fetch origin             # Assuming the upstream remote name is "origin"
$ git checkout dev             # Check out your local "dev" branch
$ git cherry-pick $COMMIT_D    # Replace "COMMIT_D" with the hash for commit D

Теперь у вас будут только изменения от коммита D в dev.

Ответ 2

Используйте git cherry-pick, обновленный рабочей связью