Почему git говорит, что я 40 совершает наступление вперед, когда я выгляжу в курсе последних событий, а push-pull (без файлов) исправляет его?

Я переключаюсь на мастер, и он говорит, что я опережаю 40 коммитов:

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 40 commits.

Но когда я делаю попытку, он говорит, что я обновляюсь:

$ git pull origin master
From https://github.com/dmcouncil/dmWorkflow
 * branch            master     -> FETCH_HEAD
Already up-to-date.

Однако я могу решить эту проблему (удалите 40 commits msg) с помощью

Michaels-MacBook-Pro-2:dmWorkflow durrantm$ git push origin master
Everything up-to-date

и теперь сообщение "40 commits" исчезло:

$ git status
# On branch mdd_play_settings_and_topics_reports
nothing to commit (working directory clean)

Почему мне приходится делать дополнительный толчок (ничего не похожего) на синхронизацию?
Есть ли лучший подход к этому?

Ответ 1

Это означает, что ваша локальная информация о происхождении/хозяине отличается от вашей удаленной версии. git fetch исправит это. git pull работает в вашем случае, потому что он также выполняет git fetch.

Ответ 2

Просто добавив к ответу Джамунда Фергюсона...

Если у вас настроено несколько настроенных пультов, вы также можете сделать git remote update, который будет извлекать информацию для всех пультов.

Как и в случае с git fetch, это только обновит информацию о состоянии пультов. Он не будет обновлять или объединять любой код, поэтому рекомендуется делать это часто, чтобы избежать странных отчетов о состоянии и неправильных различий.

Как правило, вы будете ссылаться на локальную информацию удаленной ветки, когда используете команду, которая использует косую черту вместо пробела после удаленного, например. git command origin/master и git command origin master

Пример использования: git checkout origin/master переключится на код в соответствии с вашей текущей локальной информацией, а git diff origin/master будет отличать ваш текущий код от текущей локальной информации о удаленной ветке. Это означает, что вы можете легко создать ветвь или разбить свой код с устаревшей информацией/кодом пульта, если вы не будете регулярно получать, что может привести к громоздким проблемам.