Git cherry-picking удаленный коммит из апстрима, в ветке, которая не является мастерской - PullRequest
0 голосов
/ 02 октября 2018

У меня следующая ситуация, которая отличается от this .

Вот мой локальный репо:

$ git branch
  branch1
  ...
  branchk
  master
* this-branch-where-fix-should-happen

Я хочу применить коммит, который толькосуществует в ветке upstream:staging.

Я пытался получить восходящий поток в определенной ветке

$ git fetch upstream staging:staging

From github.com:<org>/<repo>
 * [new branch]              staging    -> staging

Новый вывод из branch.

$ git branch
  branch1
  ...
  branchk
  master
  staging
* this-branch-where-fix-should-happen

Теперь пытаюсь выбрать вишню в fix-branch:

$ git cherry-pick -x <sha-1>
    fatal: bad object <sha-1>

Есть ли правильный способ выбора вишни в этой ситуации?Или я делаю это совершенно неправильно?


Редактировать: Найти проблему и исправить ее

По указанию Тима Бигелайзена

Получение вверх по течению

$ git fetch upstream

В этом и была моя ошибка: я получал номер коммита через сайт github, однако на самом деле это было <sha-1> для слияния.Чтобы получить правильный номер коммита:

$ git log --pretty=oneline --grep="<some-info-about-the-commit>" upstream/staging

Я использовал --grep="#pull-request-number" и получил правильный идентификатор коммита.

<correct-sha-1> PR description (#PR-number)

Теперь пытаюсь выбрать вишню в fix-branch:

$ git cherry-pick -x <correct-sha-1>

И это работает!

1 Ответ

0 голосов
/ 02 октября 2018

Как только вы git fetch, удаленная ветвь staging должна фактически существовать локально , как отслеживающая ветвь, называемая upstream/staging, или что-то подобное этому.Если вы хотите нацелить конкретный коммит из этой ветви отслеживания, которая отражает удаленный, просто наберите

git log upstream/staging

, чтобы увидеть коммиты из этой ветки, и выберите тот, который вы хотите.Теперь сбор вишни должен сработать:

# from the this-branch-where-fix-should-happen branch
git cherry-pick -x <sha-1 from staging>
...