Статус говорит вам о том, что вы находитесь за реф-коллом, origin/master
который является локальным рефоном в вашем локальном репо . В этом случае этот ref отслеживает ветку в некотором удаленном, вызываемом origin
, но состояние ничего не говорит вам о ветке на удаленном. Он рассказывает вам о ссылке, которая является просто идентификатором фиксации, хранящимся в вашей локальной файловой системе (в данном случае обычно это файл, называемый .git/refs/remotes/origin/master
в вашем локальном репо).
git pull
делает две операции; сначала выполняется git fetch
обновление с коммитами в удаленном репо (которое обновляет origin/master
ссылку в вашем локальном репо), затем выполняется git merge
слияние коммитов с текущей веткой.
Пока вы не выполните этот fetch
шаг (самостоятельно или через git pull
), ваше локальное хранилище не сможет узнать, что есть дополнительные коммиты в восходящем потоке, и git status
только смотрит на ваш локальный origin/master
реф.
Когда git status
говорится актуальный, это означает «актуальный с веткой, которую отслеживает текущая ветвь», что в данном случае означает «актуальный с локальным реф вызванным origin/master
». Это приравнивается только к «текущему статусу восходящего потока, который был получен в прошлый раз, когда мы сделали fetch
», что не совпадает с «текущим последним статусом восходящего потока».
Почему это работает так? Ну, fetch
шаг - потенциально медленная и дорогостоящая работа сети. Конструкция Git (и других распределенных систем управления версиями ) состоит в том, чтобы избегать сетевых операций, когда в этом нет необходимости, и представляет собой совершенно другую модель для типичной системы клиент-сервер, к которой привыкли многие (хотя, как указано в комментариях ниже, концепция Git «удаленной ветви отслеживания», которая вызывает путаницу, не используется всеми DVCS). Вполне возможно использовать Git в автономном режиме, без подключения к централизованному серверу, и результаты git status
отражают это.
Создание и переключение веток (и проверка их состояния) в Git должно быть облегченным, а не тем, что выполняет медленную сетевую работу с централизованной системой. При проектировании Git и его git status
вывода предполагалось , что пользователи это понимают (слишком много функций Git имеют смысл, только если вы уже знаете, как работает Git). С принятием Git многими и многими пользователями, которые не знакомы с DVCS, это предположение не всегда верно.
Это потому, что ваш локальный репозиторий не зарегистрировался с вышестоящими пультами. Чтобы эта работа работала так, как вы ожидаете, используйте и
git fetch
запуститеgit status
снова.источник
Хотя это все жизнеспособные ответы, я решил дать свой способ проверить, соответствует ли локальный репо удаленному, без извлечения или извлечения. Чтобы увидеть, где находятся мои ветки, я просто использую:
Он возвращает все текущие отслеживаемые ветви и, самое главное, информацию о том, являются ли они актуальными, впереди или позади удаленных исходных. После приведенной выше команды это пример того, что возвращается:
Надеюсь, это кому-нибудь поможет.
источник
«origin / master» относится к ссылке, указывающей на коммит HEAD ветви «origin / master». Ссылка - это понятное человеку имя псевдонима для объекта Git, обычно это объект фиксации. Ссылка «origin / master» обновляется только когда вы подключены
git push
к удаленному устройству ( http://git-scm.com/book/en/v2/Git-Internals-Git-References#Remotes ).В корне вашего проекта запустите:
Сравните отображаемый идентификатор фиксации с:
Они должны быть одинаковыми, и именно поэтому Git говорит,
master
что он в курсеorigin/master
.Когда ты бежишь
Это позволяет получить новые объекты Git локально в папке .git / objects. И Git обновляет .git / FETCH_HEAD так, что теперь он указывает на последний коммит выбранной ветви.
Таким образом, чтобы увидеть различия между вашей текущей локальной веткой и веткой, выбранной из апстрима, вы можете запустить
источник
origin/master
ссылка не обновляется ни извлечением, ни нажатием?Давайте посмотрим на пример git-репо, чтобы проверить, если
your branch (master)
этоup to date
сorigin/master
.Убедитесь, что локальный мастер отслеживает происхождение / мастер:
Больше информации о местном филиале:
Проверьте, находится ли origin / master на том же коммите:
Мы можем видеть тот же самый хеш, и можно с уверенностью сказать, что ветка соответствует удаленной, по крайней мере, в текущем git-репо.
источник
попробуйте
git add .
раньшеgit commit
источник
Тривиальный ответ, но точный в некоторых случаях, например, тот, который привел меня сюда. Я работал в репо, который был для меня новым, и я добавил файл, который статус не рассматривал как новый.
В итоге файл соответствует шаблону в файле .gitignore.
источник
в этом случае используйте git add и интегрируйте все ожидающие файлы, затем используйте git commit и затем git push
git add - интегрировать все файлы кулонов
git commit - сохранить коммит
git push - сохранить в хранилище
источник