ГИТ: ваш филиал находится впереди на X совершает
как это на самом деле происходит?
Я работаю в одном РЕПО сам на данный момент, так что это мой рабочий процесс:
- изменить файлы
- Commit
- повторите 1-2, пока не удовлетворены
- 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)
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