Как перемотать ветку к голове? - PullRequest
225 голосов
/ 01 марта 2012

Я давно перешел на мастер после разработки на ветке. Журнал показывает:

Ваша ветвь отстает от 'origin / master' на 167 коммитов и может быть быстро продвинута

Я пытался:

git checkout HEAD

Не имеет никакого эффекта. Это потому, что у меня есть промежуточный коммит на мастере.

Как заставить мастера остаться на голове?

Ответы [ 9 ]

315 голосов
/ 01 марта 2012

Попробуйте git merge origin/master.Если вы хотите быть уверены, что он выполняет только ускоренную перемотку вперед, вы можете сказать git merge --ff-only origin/master.

231 голосов
/ 01 марта 2012

Doing:

git checkout master
git pull origin

извлечет и объединит ветвь origin/master (вы можете просто сказать git pull, поскольку origin является значением по умолчанию).

35 голосов
/ 02 марта 2014

В вашей ситуации, git rebase также поможет.Поскольку у вас нет изменений, которых нет у мастера, git просто перемотает вперед.Если вы работаете с рабочим процессом rebase, это может быть более целесообразным, поскольку вы не получите коммит слияния, если вы все испортите.

username@workstation:~/work$ git status
# On branch master
# Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
#   (use "git pull" to update your local branch)
#
nothing to commit, working directory clean
username@workstation:~/work$ git rebase
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.
# On branch master
nothing to commit, working directory clean
27 голосов
/ 01 марта 2012
git checkout master
git pull

должен выполнить эту работу.

Вы будете получать сообщение «Ваша ветвь позади» каждый раз, когда вы работаете на ветке, отличной от главной , кто-то меняет намастер и вы git pull.

(branch) $ //hack hack hack, while someone push the changes to origin/master
(branch) $ git pull   

теперь ссылка на источник / мастер удалена, но ваш мастер не объединен с ним

(branch) $ git checkout master
(master) $ 

сейчас мастер находится позади источника / мастера и может быть быстро переадресован

this will pull and merge (so merge also newer commits to origin/master)
(master) $ git pull 

this will just merge what you have already pulled
(master) $ git merge origin/master

теперь ваш мастер и источник / мастер синхронизированы

11 голосов
/ 03 сентября 2015

Если вы стоите в другой ветке и хотите получить самую новую версию мастера, вы также можете сделать

git checkout -B master origin/master

2 голосов
/ 14 ноября 2014

Никаких сложностей не требуется, просто встаньте в своей ветке и выполните git pull , это сработало для меня

Или, как вторая попытка, мастер происхождения git pull только вслучай, если вам не повезло с первой командой

1 голос
/ 13 марта 2019

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

Если вы работали над другой веткой в ​​течение некоторого времени и хотели обновить устаревшие ветки с удаленной на их соответствующую головку:

git fetch origin master:master other:other etc:etc
0 голосов
/ 02 марта 2018

К перебазирование текущий локальный трекер ветвь, перемещающая локальные изменения поверх последнего удаленного состояния:

$ git fetch && git rebase

В целом, к ускоренная перемотка вперед и сброс локальных изменений ( аппаратный сброс ) *:

$ git fetch && git checkout ${the_branch_name} && git reset --hard origin/${the_branch_name}

до ускоренная перемотка вперед и сохранениелокальные изменения ( rebase ):

$ git fetch && git checkout ${the_branch_name} && git rebase origin/${the_branch_name}

* - чтобы отменить изменение, вызванное непреднамеренным аппаратным сбросом, сначала выполните git reflog, которое отображает состояние HEAD в обратном порядке, найдитехеш, на который указывал ГОЛОВКА перед операцией сброса (обычно это очевидно), и принудительно сбрасывал ветку на этот хеш.

0 голосов
/ 02 июля 2017

Переместите указатель вашей ветки на ГОЛОВУ:

git branch -f master

Ваша ветвь master уже существует, поэтому git не позволит вам перезаписать ее, если вы не используете ... -f (этот аргумент означает --force)

Или вы можете использовать rebase:

git rebase HEAD master

Делайте это на свой страх и риск;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...