Как вытащить в не текущую ветку? - PullRequest
30 голосов
/ 17 марта 2012

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

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

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

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

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

Ответ

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

Ответы [ 3 ]

25 голосов
/ 10 августа 2017

git fetch -u origin master:master

Объединение, обновление и извлечение веток Git без использования оформлений

git fetch -u <remote> <remoteBranch>:<localBranch>

-u гарантирует, что команда все еще работает , даже если вы отметили данную ветвь .

3 голосов
/ 17 марта 2012

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

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

$ 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, и все это, не покидая текущей ветви.

1 голос
/ 16 мая 2019

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

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

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