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 ]

473 голосов
/ 24 июля 2010

Если вы получили это сообщение после выполнения git pull remote branch, попробуйте добавить к нему git fetch. (При желании можно запустить git fetch -p, чтобы удалить удаленные ветки из репозитория)

Кажется, что Fetch обновляет локальное представление удаленной ветви, что не обязательно происходит, когда вы делаете git pull remote branch.

110 голосов
/ 13 марта 2014

Используйте

git pull --rebase

Опция --rebase означает, что git отодвинет ваш локальный коммит в сторону, синхронизируется с удаленным и затем попытается применить ваши коммиты из нового состояния.

55 голосов
/ 26 сентября 2016

Используйте эти 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

Наслаждайтесь.

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

Я думаю, вы неправильно прочитали сообщение - ваша ветвь не опережает master, она равна master. Он опережает origin/master, который является веткой удаленного отслеживания , которая записывает состояние удаленного репозитория из вашего последнего push, pull или fetch. Он говорит вам именно то, что вы сделали; Вы опередили пульт, и он напоминает вам нажать.

26 голосов
/ 04 декабря 2010

Кто-то сказал, что вы, возможно, неправильно читаете ваше сообщение, но это не так. Эта проблема на самом деле связана с вашим <project>/.git/config файлом. В нем будет раздел, похожий на этот:

[remote "origin"]
    url = <url>
    fetch = +refs/heads/*:refs/remotes/origin/*

Если вы удалите строку выборки из файла .git / config вашего проекта, вы остановите «Ваша ветвь впереди« origin / master »на N commits». раздражение от происходящего.

Или так я надеюсь. :)

9 голосов
/ 06 сентября 2016

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

git reset --hard origin/master

Так что теперь у меня снова:

On branch master
Your branch is up-to-date with 'origin/master'.
8 голосов
/ 15 декабря 2016

В моем случае это было потому, что я переключился на мастер, используя

 git checkout -B master

Просто чтобы получить новую версию вместо

 git checkout master

Первая команда сбрасываетглава мастера до моих последних коммитов

Я использовал

git reset --hard origin/master

Чтобы исправить это

8 голосов
/ 06 декабря 2016

Я рассмотрел каждое решение на этой странице и, к счастью, @ anatolii-pazhyn прокомментировал, потому что его решение было тем, которое работало К сожалению, мне не хватает репутации , чтобы поддержать его, но я рекомендую сначала попробовать его решение:

git reset --hard origin/master

Что дало мне:

HEAD is now at 900000b Comment from my last git commit here

Я также рекомендую:

git rev-list origin..HEAD
# to see if the local repository is ahead, push needed

git rev-list HEAD..origin
# to see if the local repository is behind, pull needed

Вы также можете использовать:

git rev-list --count --left-right origin/master...HEAD
# if you have numbers for both, then the two repositories have diverged

Удачи

4 голосов
/ 11 сентября 2013

У меня была такая же проблема на машине с Windows. Когда я запускал команду git pull origin master, я получал предупреждение «впереди« origin / master »от X commitits». Я обнаружил, что если бы я вместо этого запустил git pull origin и НЕ указывал ветку, то я больше не получил бы предупреждение.

2 голосов
/ 10 сентября 2013

Я действительно имел это, когда делал переключение / проверку с TortiseGIT.

Моя проблема заключалась в том, что я создал ветку на основе другой локальной ветки. В /.git/config была создана запись «слияния», которая выглядела примерно так:

[branch "web"]
    merge = refs/heads/develop
    remote = gitserver

Где всякий раз, когда я переключался на ветку "web", мне говорили, что я на 100+ коммитов впереди разработки. Ну, я больше не собирался развиваться, чтобы это было правдой. Мне удалось просто удалить эту запись, и она, кажется, работает как ожидалось. Он правильно отслеживает удаленную ссылку вместо того, чтобы жаловаться на то, что находится за ветвью разработки.

Как сказал Викрам, этот поток переполнения стека - лучший результат в Google при поиске этой проблемы, поэтому я решил поделиться своей ситуацией и решением.

...