ГИТ: ваш филиал находится впереди на X совершает



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



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




  1. изменить файлы

  2. Commit

  3. повторите 1-2, пока не удовлетворены

  4. Push to master


тогда, когда я делаю git status Он говорит мне, что моя ветка вперед на X совершает (предположительно столько же коммитов, сколько я сделал). Это потому, что когда вы нажимаете код, он не делает фактически обновите свои локально кэшированные файлы (в .папки ЖКТ)? 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)
683   16  

16 ответов:

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

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

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

git pull --rebase

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

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

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

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

кто-то сказал, что ты можешь быть неправильное ваше сообщение, вы не. Этот вопрос действительно имеет отношение к вашей . В нем будет раздел, похожий на этот:

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

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

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

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

git reset --hard origin/master

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

On branch master
Your branch is up-to-date with 'origin/master'.

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

 git checkout -B master

просто вытащить новую версию вместо

 git checkout master

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

Я

git reset --hard origin/master

исправить

Я просмотрел все решения на этой странице, и, к счастью, @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

удачи

у меня была такая же проблема на машине с Windows. Когда я побежал git pull origin master команда, я бы получил предупреждение" впереди 'origin/master' by X commits". Я обнаружил, что если бы я вместо этого побежал git pull origin и не указал ветку, тогда я больше не получу предупреждение.

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

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

первая попытка с push -f или форс вариант

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

результат выше того, что ваш толчок синхронизировал ваш локальный / филиал с вашим удаленным / филиалом однако кэш в вашем локальном репо по-прежнему показывает предыдущую фиксацию (local/branch ...при условии, что только одна фиксация была нажата) как голова.

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

устранение:

$ git remote -v
github  [email protected]:schacon/hw.git (fetch)
github  [email protected]:schacon/hw.git (push)
$ git remote add origin git://github.com/pjhyett/hw.git
$ git remote -v
github  [email protected]:schacon/hw.git (fetch)
github  [email protected]: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  [email protected]:schacon/hw.git (fetch)
github  [email protected]:schacon/hw.git (push)

теперь push -f следующим образом

git push -f github master### обратите внимание на вашу команду не имеет

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

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

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

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

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

ответы, которые предлагают git pull или git fetch являются правильными.
Сообщение генерируется, когда git status видит разницу между .git/FETCH_HEAD и .git/refs/remotes/<repository>/<branch> (например,.git/refs/remotes/origin/master).

последний файл записывает голову из последней выборки (для репозитория/ветки). Делать git fetch обновления и файлы для нынешнего руководителя филиала.
Конечно, если нет ничего, чтобы извлечь (потому что локальный репозиторий уже обновлен), то .git/FETCH_HEAD не меняется.

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

git pull origin develop

следует $ git pull --rebase.

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

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

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

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

Comments

    Ничего не найдено.