(git): Как получить конкретный коммит из ветки upstream? - PullRequest
10 голосов
/ 16 февраля 2010

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

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

И я хочу перенести только коммит 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, но я не могу догадаться, как.

Ответы [ 2 ]

12 голосов
/ 16 февраля 2010

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

$ git fetch origin             # Assuming the upstream remote's 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.

0 голосов
/ 16 февраля 2010

Использование git cherry-pick дополнено рабочей ссылкой

...