Как это на самом деле происходит?
Я сейчас работаю в одном репо, так что это мой рабочий процесс:
- Изменить файлы
- совершить
- Повторите 1-2, пока не выполните
- Нажмите, чтобы освоить
Затем, когда я делаю a, git status
он говорит мне, что моя ветвь впереди X коммитов (предположительно, такое же количество коммитов, которое я сделал). Это потому, что когда вы нажимаете код, он фактически не обновляет ваши локально кэшированные файлы (в папках .git)? git pull
кажется, "исправить" это странное сообщение, но мне все еще любопытно, почему это происходит, может быть, я неправильно использую git?
в том числе какая ветка печатается в сообщении
Мой местный филиал впереди мастера
где вы нажимаете / вытягиваете текущую ветку
Я перехожу на GitHub и перетаскиваю на тот компьютер, над которым я работаю в тот момент, моя локальная копия всегда полностью обновлена, так как я работаю над этим только я.
на самом деле он не проверяет удаленное репо
Это то, что я думал, я решил, что я буду уверен, что мое понимание этого было правильным.
Вы передаете дополнительные аргументы?
Не те, которые я вижу, может, на моем конце происходит какая-то забавная конфигурация?
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
источник
push
и каковы ваши настройки удаленного и филиала конфигурации?git status
не проверяет удаленный репозиторий,git pull
делает. Если у вас есть ветвь отслеживания для репозитория, к которому выgit push
отправляете, обновите локальную ветвь отслеживания, чтобы отразить новое состояние удаленной ветви, если ваша отправка прошла успешно. Вот почему я спросил о конфигурации asker, потому что, если это не происходит правильно, возможно, есть ошибка конфигурации.git status
? действительно? mygit status
никогда не говорит мне, насколько далеко впереди моя ветка ... вы передаете какие-то дополнительные аргументы?git status
не идет в удаленный репозиторий, чтобы проверить, была ли удаленная ветвь обновлена. Он говорит вам, насколько далеко впереди ваша локальная ветка по сравнению с вашей локальной веткой удаленного отслеживания Проблема заключается в том, что обычноеgit push
(а также извлечение и извлечение) должно обновлять ветку удаленного отслеживания, и для запрашивающего это, похоже, не работает. Чтобы понять, почему мы должны видеть как точную формуgit push
, которая используется, так и конфигурацию локального репозитория, но, поскольку спрашивающий уже принял ответ, я не вижу, чтобы это происходило сейчас.Ответы:
Если после этого вы получите это сообщение
git pull remote branch
, попробуйте добавить егоgit fetch
. (При желании запуститьgit fetch -p
для удаления удаленных веток из репо)Кажется, что Fetch обновляет локальное представление удаленной ветви, что не обязательно происходит, когда вы делаете a
git pull remote branch
.источник
использование
Опция --rebase означает, что git отодвинет ваш локальный коммит, синхронизируется с удаленным, а затем попытается применить ваши коммиты из нового состояния.
источник
$ git pull --rebase Current branch xyz is up to date. $ git status On branch xyz Your branch is ahead of 'origin/xyz' by 6 commits. (use "git push" to publish your local commits) nothing to commit, working tree clean
git
, и никогда не пишите историю бездумно!Используйте эти 3 простые команды
Шаг 1 :
git checkout <branch_name>
Шаг 2 :
git pull -s recursive -X theirs
Шаг 3 :
git reset --hard origin/<branch_name>
Более подробная информация: https://stackoverflow.com/a/39698570/2439715
Наслаждаться.
источник
git reset --hard origin/master
прояснил это для меня.Я думаю , что вы неправильное сообщение - ваш филиал не впереди
master
, то естьmaster
. Это впередиorigin/master
, который является удаленным отслеживанием ветви , которая записывает статус удаленного хранилища с вашего последнимpush
,pull
илиfetch
. Он говорит вам точно, что вы сделали; Вы опередили пульт, и он напоминает вам нажать.источник
Кто-то сказал, что вы, возможно, неправильно читаете свое сообщение, а вы нет. Эта проблема на самом деле связана с вашим
<project>/.git/config
файлом. В нем будет раздел, похожий на этот:Если вы удалите строку выборки из файла .git / config вашего проекта, вы остановите «Ваша ветвь опережает« origin / master »по
N
коммитам». раздражение от происходящего.Или так я надеюсь. :)
источник
ahead by x commits
сообщение. Я давно не видел сообщения.У меня была эта проблема на моем сервере стадии, где я делаю только тяги. И хард ресет помог мне очистить HEAD так же, как удаленный.
Итак, теперь я снова
источник
Это сработало для меня
git reset --hard origin/master
Вывод должен выглядеть так
On branch dev HEAD is now at ae1xc41z Last commit message
источник
В моем случае это было потому, что я перешел на мастер с помощью
Просто вытащить новую версию вместо
Первая команда сбрасывает голову мастера на мои последние коммиты
я использовал
Чтобы исправить это
источник
Я рассмотрел каждое решение на этой странице и, к счастью, @ anatolii-pazhyn прокомментировал, потому что его решение было тем, которое сработало. К сожалению, у меня недостаточно репутации, чтобы поддержать его, но я рекомендую сначала попробовать его решение:
Который дал мне:
Я также рекомендую:
Вы также можете использовать:
Удачи
источник
У меня была такая же проблема на машине с Windows. Когда я запускал
git pull origin master
команду, я получал предупреждение «впереди« origin / master »от X commits». Я обнаружил, что если бы я вместо этого запустилgit pull origin
и НЕ указал ветку, то больше не получил бы предупреждение.источник
git fetch
за кадром.Это просто напоминает вам различия между текущей веткой и веткой, которая делает текущий трек. Пожалуйста, предоставьте больше информации, в том числе о том, какая ветка напечатана в сообщении и где вы нажимаете / вытягиваете текущую ветку.
источник
Хотя этот вопрос немного устарел ... Я был в похожей ситуации, и мой ответ здесь помог мне решить аналогичную проблему, которая у меня была
Сначала попробуйте с
push -f
опцией или силойЕсли это не сработало, возможно, что (как в моем случае) удаленные репозитории (или, скорее, ссылки на удаленные репозитории, которые отображаются на
git remote -v
) могут не обновляться.В результате вышеизложенного, ваш push синхронизировал вашу локальную / ветвь с вашей удаленной / ветвью, однако, кэш в вашем локальном репо по-прежнему показывает предыдущий коммит (локальный / ветвь ... при условии, что был выдвинут только один коммит) как HEAD.
Чтобы подтвердить вышеизложенное, клонируйте репозиторий в другом месте и попробуйте сравнить локальный / ответвительный HEAD и удаленный / ответвительный HEAD. Если они оба одинаковы, то вы, вероятно, столкнулись с проблемой, которую я сделал.
Решение:
Теперь сделайте
push -f
следующееgit push -f github master
### Обратите внимание, что ваша команда не имеетorigin
!Сделать
git pull
сейчасgit pull github master
при
git status
получении# On branch master
nothing to commit (working directory clean)
Я надеюсь, что это будет полезно для кого-то, так как количество просмотров настолько велико, что при поиске этой ошибки почти всегда перечисляется эта тема сверху
Также обратитесь к gitref для деталей
источник
На самом деле это происходило, когда я делал переключение / проверку с TortiseGIT.
Моя проблема заключалась в том, что я создал филиал на основе другого локального филиала. Он создал запись «слияния»,
/.git/config
которая выглядела примерно так:Когда всякий раз, когда я переключался на ветку «web», мне говорили, что я на 100+ коммитов впереди разработки. Ну, я больше не собирался развиваться, чтобы это было правдой. Мне удалось просто удалить эту запись, и она, кажется, работает как ожидалось. Он правильно отслеживает удаленный реф, вместо того, чтобы жаловаться на то, что находится за ветвью разработки.
Как сказал Викрам, этот поток переполнения стека - лучший результат в Google при поиске этой проблемы, поэтому я решил поделиться своей ситуацией и решением.
источник
Я хотел бы повторить то же, что упомянуто @Marian Zburlia выше. Это сработало для меня и предложило бы то же самое другим.
git pull origin develop
должно сопровождаться
$ git pull --rebase
.Это удалит комментарии, появляющиеся
$ git status
после последней попытки.источник
git fetch
разрешит это для васЕсли мое понимание верно, ваш локальный (кэшированный)
origin/master
устарел. Эта команда обновит состояние хранилища с сервера.источник
Мой опыт в командной среде со многими филиалами. Мы работаем в наших собственных ветках функций (в локальных клонах), и это было одно из тех, которые
git status
показали, что я впереди на 11 коммитов. Как и автор вопроса, мое рабочее предположение заключалось в том, что +11 было от моих собственных коммитов. .Оказалось, что я перенес изменения из общей
develop
ветви в свою функциональную ветку много недель назад - но забыл! Когда я сегодня снова посетил свою локальную ветку функций и выполнилgit pull origin develop
команду, число подскочило до +41 коммитов вперед. Большая работа была проделана,develop
и поэтому моя локальная ветвь функций была еще дальше, чем ветка функций наorigin
хранилище.Поэтому, если вы получите это сообщение, вспомните о любых попытках слияния / слияния, которые вы, возможно, сделали из других ветвей (ваших или других), к которым у вас есть доступ. Сообщение просто сигнализирует вам о необходимости
git push
этихpull
изменений обратно вorigin
репозиторий («отслеживающую ветвь») из вашего локального репозитория, чтобы все было синхронизировано.источник
Ответы, которые предполагают
git pull
илиgit fetch
являются правильными.Сообщение генерируется, когда
git status
видит разницу между.git/FETCH_HEAD
и.git/refs/remotes/<repository>/<branch>
(например,.git/refs/remotes/origin/master
).Последний файл записывает HEAD из последней выборки (для репозитория / ветви). Выполняет
git fetch
обновление обоих файлов до текущего заголовка ветви.Конечно, если не нужно ничего извлекать (потому что локальный репозиторий уже обновлен), тогда
.git/FETCH_HEAD
ничего не изменится.источник
.git/FETCH_HEAD
содержит9f7336c873ccffc772168bf49807e23ff74014d3 branch 'master' of URL
и.git/refs/remotes/origin/master
содержит9f7336c873ccffc772168bf49807e23ff74014d3
, но я все еще получаю сообщение и ниgit pull
ниgit fetch
решает эту проблемуЕсли вы получили это сообщение после выполнения коммита, чтобы отследить файл в ветке, попробуйте внести некоторые изменения в любой файл и выполнить коммит. По-видимому, вы не можете сделать один коммит, который включает только отслеживание ранее отслеженного файла. Наконец, этот пост помог мне решить всю проблему https://help.github.com/articles/removing-files-from-a-repository-s-history/ . Мне просто нужно было удалить файл из истории хранилища.
источник