Git: Ваша ветвь впереди X коммитов - PullRequest
338 голосов
/ 12 марта 2010

Как это происходит на самом деле?

Я сейчас работаю в одном репо, так что это мой рабочий процесс:

  1. Изменение файлов
  2. Commit
  3. Повторяйте 1-2 до тех пор, пока не будете удовлетворены
  4. Пуш к мастеру

Затем, когда я делаю 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)

Ответы [ 18 ]

2 голосов
/ 11 июля 2013

Хотя этот вопрос немного устарел ... Я был в похожей ситуации, и мой ответ здесь помог мне исправить похожую проблему, с которой я столкнулся

Первая попытка с push -f или принудительной опцией

Если это не сработало, возможно, что (как и в моем случае) удаленные репозитории (или, скорее, ссылки на удаленные репозитории, которые отображаются на git remote -v), возможно, не обновляются.

Из-за того, что ваш push синхронизировал вашу локальную / ветвь с вашей удаленной / ветвью, тем не менее, кэш в вашем локальном репо по-прежнему показывает предыдущий коммит (локальный / ветвь ... при условии, что был передан только один коммит) как HEAD. 1009 *

Чтобы подтвердить вышеуказанное, клонируйте репозиторий в другом месте и попробуйте сравнить локальный / ответвительный HEAD и удаленный / ответвительный HEAD. Если они оба одинаковы, вы, вероятно, столкнулись с проблемой, которую я сделал

Решение:

$ git remote -v
github  git@github.com:schacon/hw.git (fetch)
github  git@github.com:schacon/hw.git (push)
$ git remote add origin git://github.com/pjhyett/hw.git
$ git remote -v
github  git@github.com:schacon/hw.git (fetch)
github  git@github.com:schacon/hw.git (push)
origin  git://github.com/pjhyett/hw.git (fetch)
origin  git://github.com/pjhyett/hw.git (push)
$ git remote rm origin
$ git remote -v
github  git@github.com:schacon/hw.git (fetch)
github  git@github.com:schacon/hw.git (push)

Теперь сделайте 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 для деталей

2 голосов
/ 12 марта 2010

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

2 голосов
/ 20 февраля 2019

Затем, когда я делаю git-статус, он говорит мне, что моя ветвь впереди X коммитов (предположительно, такое же количество коммитов, что я сделал ).

Мой опыт работы в командной среде со многими филиалами. Мы работаем в наших собственных ветках функций (в локальных клонах), и это была одна из тех, которые git status показали, что я был на 11 коммитов вперед. Мое рабочее предположение, как и у автора вопроса, состояло в том, что +11 был от коммитов моих .

Оказалось, что я перенес изменения из общей ветви develop в свою функциональную ветку много недель назад - но забыл! Когда я сегодня снова посетил свою локальную ветку функций и выполнил git pull origin develop, число увеличилось до +41 коммитов вперед. Большая работа была проделана в develop, и поэтому моя локальная ветвь функций была еще дальше, чем ветка функций в репозитории origin.

Так что, если вы получите это сообщение, вспомните любые попытки / слияния, которые вы, возможно, сделали из других ветвей (ваших или других), к которым у вас есть доступ. Сообщение просто сигнализирует о том, что git push эти pull ed изменится обратно на origin репо («отслеживающую ветвь») из вашего локального репо, чтобы получить синхронизацию вещей.

1 голос
/ 25 августа 2018

git fetch разрешит это для вас

Если мое понимание верно, ваш локальный (кэшированный) origin/master устарел. Эта команда обновит состояние хранилища с сервера.

1 голос
/ 20 ноября 2017

Я хотел бы повторить то же, что упомянуто @Marian Zburlia выше. Это сработало для меня и предложило бы то же самое другим.

git pull origin develop

должно сопровождаться $ git pull --rebase.

Это удалит комментарии, появляющиеся на $ git status после последнего извлечения.

1 голос
/ 22 января 2014

Ответы, которые предлагают 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 не изменится.

0 голосов
/ 29 мая 2019

Это сработало для меня

git reset --hard origin/master

Вывод должен выглядеть как

On branch dev HEAD is now at ae1xc41z Last commit message

0 голосов
/ 26 марта 2018

Если вы получили это сообщение после выполнения коммита, чтобы отследить файл в ветке, попробуйте внести некоторые изменения в любой файл и выполнить коммит. Видимо, вы не можете сделать один коммит, который включает в себя только отслеживание ранее отслеженного файла. Наконец, этот пост помог мне решить всю проблему https://help.github.com/articles/removing-files-from-a-repository-s-history/. Мне просто нужно было удалить файл из истории хранилища.

...