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:projectgit remote rm origingit 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)

Другие вопросы по тегам