Подтвердить что ты не робот

Как втянуть в не-текущую ветвь?

Скажите, что моя текущая ветка - myfeature. Я хочу обновить мастер. Насколько я знаю, оба git merge git pull всегда сливаются в текущую ветвь.

Есть ли способ объединить изменения из удаленной ветки (например, origin/master) в ветку, в которой я сейчас не включен (мастер)? Я могу думать об одном способе:

git stash
git checkout master
git pull origin/master
git checkout myfeature
git stash apply

Есть ли лучший?

(Возможно, весь мой вопрос неправильный: будет ли git fetch автоматически обновлять мастер для соответствия начальному/ведущему, если включено дистанционное отслеживание?)

Ответ

Чтобы подытожить ответ ниже, он в основном "просто использует origin/master напрямую, вам, вероятно, не нужно действительно делать это слияние".

4b9b3361

Ответ 1

Вы правы, что pull/merge сливается только в текущую ветвь.

Однако вы можете использовать выборку. Например (имена ниже изменены для защиты невинных, но хеши являются реальными):

$ git branch | grep '^*'
* SOMEBRANCH
$ git rev-parse OTHER_BRANCH origin/OTHER_BRANCH
7b9b8e57cf19964b60ebda0f03a1d5da3de9e2fe
7b9b8e57cf19964b60ebda0f03a1d5da3de9e2fe
$ git fetch
7b9b8e5..1efca56  OTHER_BRANCH -> origin/OTHER_BRANCH
$ git rev-parse OTHER_BRANCH origin/OTHER_BRANCH
7b9b8e57cf19964b60ebda0f03a1d5da3de9e2fe
1efca56c08b7a0f511a3951195656a798c56aa62

В этом случае fetch обновил связку начала/ветвей. Ни один из локальных веток не был обновлен (вывод git rev-parse для тех, кто остается тем же), но новые коммиты теперь находятся в репо и могут быть просмотрены (git log origin/OTHER_BRANCH, gitk --all и т.д.).

В зависимости от ваших потребностей этого может быть достаточно. В частности, вы можете увидеть, что должно быть применено от origin/master на master, все, не выходя из текущей ветки.

Ответ 3

Я начал использовать github hub sync helper для автоматизации этого процесса, вместо того, чтобы полагаться на выбор отдельных веток, которые меняются между различными репозиториями, над которыми вы работаете:

hub - это расширение для git из командной строки, которое помогает вам выполнять повседневные задачи GitHub, даже не выходя из терминала. https://hub.github.com/

$ hub sync
  • Если локальный филиал устарел, перенесите его вперед;
  • Если локальная ветвь содержит невыпущенную работу, предупредите об этом;
  • Если ветвь кажется объединенной и ее восходящая ветвь была удалена, удалите ее.