git clone получает HEAD, но git pull не получает последнюю HEAD после операции Merge Push на репозитории Gerrit
У меня есть Git Repository, и обзор Gerrit работает поверх этого. У меня есть привилегии Push/ Push Merge Commit для этого репо (что означает, что я могу обойти проверку Gerrit и слить код напрямую, как если бы Gerrit не существовал).
В рамках рутинной деятельности я merged
завершенная тема (передана и утверждена в Gerrit) в мой мастер
git merge master-b734912
Updating 08f272e..d265243
Этот шаг означает мой местный / мастер HEAD
на SHA-1 08f272e
переадресация в d265243
что, как и ожидалось
Fast-forward
с последующим push
синхронизировать мой локальный с удаленным
git push gerrit:projectname master
Псевдоним 'gerrit:' определен в конфигурации ssh в моем профиле пользователя.
Я отрываюсь от пульта / мастера, чтобы убедиться, что все синхронизировано
git pull gerrit:projectname master
на котором я получаю
From gerrit:crs2awips
* branch master -> FETCH_HEAD
Already up-to-date.
тем не мение git log --graph --oneline master
показывает обновленное дерево с новым коммитом, как и ожидалось
* d265243 git commit message 2
* 08f272e git commit message 1
В то время как git log --graph --oneline origin/master
по-прежнему показывает последний коммит перед слиянием.
* 08f272e git commit message 1'
Еще более удивительным является то, что веб-интерфейс Gerrit Review отображает удаленную версию с обновленной фиксацией.
Кроме того, клонирование хранилища теперь будет иметь master
ветвь с коммит-идентификатором, как и ожидалось.
Из вышесказанного я делаю вывод... как-то локально HEAD
не обновляется после git pull
и выбрасывает его из синхронизации после каждого нажатия.
Довольно неудобно клонировать свежий репо каждый раз после PUSH
было сделано.
Любой совет.
Недавно я тоже поднял этот вопрос. Я считаю, что этот вопрос имеет какое-то отношение к этому.
1 ответ
Хорошо, я отвечаю на свой вопрос здесь.
По моему мнению, что могло произойти, это ссылка на удаленные (ссылки на удаленные репозитории, т.е. сделать git branch -a
, Ветви, которые начинаются с "remotes/*" - это то, что я здесь имею в виду) остались "устаревшими" по некоторым причинам, я не понимаю.
Перед моим предложением в качестве быстрой проверки попробуйте эти шаги:
git status
должен бросить сообщение
# On branch master
# Your branch is ahead of 'origin/master' by X commit(s).
#
blah blah blah...
когда я вижу это сообщение, мой инстинкт должен сделать push
git push remote master
... в этом случае я работал над мастером, за что я получаю
Everything up-to-date
что может сбить с толку, и я иду и делаю git status
для которого появляется то же самое сообщение:
# On branch master
# Your branch is ahead of 'origin/master' by X commit(s).
#
blah blah blah...
использование push -f
вариант и проверить git status
чтобы увидеть, исчезнет ли сообщение.
Если вы по-прежнему получаете такое же запутанное (но правильное) сообщение, вы, вероятно, с подозрением относитесь к своему пульту.
Один из комментариев в связанном вопросе указал мне правильное направление.
перечисляя шаги здесь:
git remote -v
бросает вывод
origin gerrit:project (fetch)
origin gerrit:project (push)
Из gitref добавьте сюда свои пульты и удалите источник
git remote add gerrit gerrit:project
git remote rm origin
git remote -v
который должен показать следующее:
gerrit gerrit:project (fetch)
gerrit gerrit:project (push)
Теперь сделай push -f
следующее
git push -f gerrit master
вероятно, уступит Everything up-to-date
... но на этот раз это действительно означало это;-)
на git status
Получать
# On branch master
nothing to commit (working directory clean)