Как втянуть в не-текущую ветвь?
Скажите, что моя текущая ветка - 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
напрямую, вам, вероятно, не нужно действительно делать это слияние".
Ответы
Ответ 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
, все, не выходя из текущей ветки.
Ответ 2
git fetch -u origin master:master
Объединить, обновить и вывести ветки Git без использования проверок
git fetch -u <remote> <remoteBranch>:<localBranch>
-u
гарантирует, что команда по-прежнему работает даже если у вас есть выбранная ветка.
Ответ 3
Я начал использовать github hub sync
helper для автоматизации этого процесса, вместо того, чтобы полагаться на выбор отдельных веток, которые меняются между различными репозиториями, над которыми вы работаете:
hub - это расширение для git из командной строки, которое помогает вам выполнять повседневные задачи GitHub, даже не выходя из терминала. https://hub.github.com/
$ hub sync
- Если локальный филиал устарел, перенесите его вперед;
- Если локальная ветвь содержит невыпущенную работу, предупредите об этом;
- Если ветвь кажется объединенной и ее восходящая ветвь была удалена, удалите ее.