Ответ 1
Что говорит вам статус, так это то, что вы находитесь за ссылкой ref origin/master
, которая является локальным ref в вашем локальном репо. В этом случае ref проверяет ветвь на каком-то удаленном устройстве, называемом origin
, но статус ничего не говорит о ветке на пульте дистанционного управления. Он сообщает вам о ref, который является только идентификатором фиксации, хранящимся в вашей локальной файловой системе (в этом случае он обычно находится в файле с именем .git/refs/remotes/origin/master
в вашем локальном репо).
git pull
выполняет две операции; сначала он выполняет git fetch
, чтобы обновиться с фиксацией в удаленном репо (который обновляет ref origin/master
в вашем локальном репо), затем он git merge
объединяет эти коммиты в текущую ветвь.
Пока вы не сделаете шаг fetch
(самостоятельно или через git pull
), ваше местное репо не сможет узнать, что есть дополнительные коммиты вверх по течению, а git status
просматривает только локальный origin/master
ref.
Когда git status
говорит обновленный, это означает "обновленный с веткой, что текущие ветки отслеживаются", что в данном случае означает "обновленный с локальным ref, называемый origin/master
". Это соответствует только "актуальному состоянию восходящего потока, который был получен в последний раз, когда мы сделали fetch
", который не совпадает с "последним с последним статусом в реальном времени восходящего потока".
Почему это работает? Ну, шаг fetch
- это потенциально медленная и дорогая сетевая операция. Конструкция Git (и других распределенных систем управления версиями) заключается в том, чтобы избежать сетевых операций, когда это не нужно, и является совершенно другой моделью для типичного система клиент-сервер, к которой привыкли многие люди. Полностью можно использовать Git офлайн, без подключения к централизованному серверу, и вывод git status
отражает это.
Создание и переключение ветвей (и проверка их состояния) в Git должно быть легким, а не тем, что выполняет медленную работу сети с централизованной системой. Предположения при проектировании Git и вывода git status
заключались в том, что пользователи это понимают. С принятием Git множеством и множеством пользователей, которые не знакомы с DVCS, это предположение не всегда актуально.