Ответ 1
Doing:
git checkout master
git pull origin
будет извлекать и объединять ветвь origin/master
(вы можете просто сказать git pull
, поскольку значение по умолчанию - по умолчанию).
Я перешел на мастера после разработки на ветке в течение длительного времени. Журнал показывает:
Ваша ветвь отстает от 'origin/master' на 167 коммитов и может быть быстро перенесена.
Я старался:
git checkout HEAD
Это не имеет никакого эффекта. Это потому, что у меня есть промежуточный коммит на мастере.
Как заставить мастера остаться на голове?
Doing:
git checkout master
git pull origin
будет извлекать и объединять ветвь origin/master
(вы можете просто сказать git pull
, поскольку значение по умолчанию - по умолчанию).
Попробуйте git merge origin/master
. Если вы хотите быть уверенным, что он выполняет только перемотку вперед, вы можете сказать git merge --ff-only origin/master
.
В вашей ситуации git rebase
также выполнит трюк. Поскольку у вас нет изменений, которые у мастера нет, git будет просто перемотка вперед. Если вы работаете с рабочим процессом rebase, это может быть более целесообразным, так как вы не закончите слияние, если вы испортите.
[email protected]:~/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
[email protected]:~/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
git checkout master
git pull
должен выполнить эту работу.
Вы получите сообщение "Ваша ветка позади" каждый раз, когда вы работаете на ветке, отличной от мастера, кто-то делает изменения в master и вы 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
теперь ваш мастер и источник/мастер синхронизированы
Если вы находитесь на другой ветке и хотите проверить новейшую версию мастера, вы также можете сделать
git checkout -B master origin/master
Никаких сложностей не требуется просто встаньте на свою ветку и сделайте git pull, это сработало для меня
Или, как вторая попытка git оттянуть исходный мастер только в том случае, если вам не повезло с первой командой
Переместите указатель вашей ветки на ГОЛОВУ:
git branch -f master
Ваш master
ветки уже существует, поэтому git не позволит вам перезаписать его, если вы не используете... -f
(этот аргумент означает --force
)
Или вы можете использовать rebase:
git rebase HEAD master
Делайте это на свой страх и риск;)
Чтобы перебазировать текущую локальную ветку трекера, перемещая локальные изменения поверх последнего удаленного состояния:
$ 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
, которая отображает состояние git reflog
в обратном порядке, найдите хэш, на который указывал git reflog
перед операцией сброса (обычно это очевидно), и принудительно сбросьте ветвь к этому. хэш.