Подтвердить что ты не робот

Почему он говорит: "Ваша ветка опережает начало/мастер на 857 коммитов", когда мне нужно * вытащить * источник оригинала

Во-первых, я знаю несколько аналогично сформулированных вопросов, например:

Ни один из них (AFAICT) не имеет ответа, соответствующего моей версии этого вопроса.

Моя ситуация:

$ git status
# On branch stable
nothing to commit (working directory clean)
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 857 commits.

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

Я знаю, что на самом деле противоположная ситуация верна, что моя локальная ветвь master находится за удаленным origin/master и на самом деле мне нужно git pull origin master, прежде чем выполнять некоторую работу над ней локально. (или, возможно, просто git fetch origin?)

Мой вопрос: есть ли какая-то причина для сообщения, которое должно быть написано Your branch is ahead of 'origin/master' by 857 commits. таким образом, что оно буквально имеет смысл?

Потому что, как я понимаю, в данный момент значение противоположно тому, что говорится в сообщении ( "моя ветка" находится за истоком/мастером).

Или это действительно означает: "HEAD удаленной основной ветки впереди вашей локальной ветки начального/основного отслеживания"?

Обновление FWIW Я работаю в команде из полудюжины других разработчиков. Мы все тянем, совершаем и толкаем и т.д. Много раз в день без проблем. У меня здесь нет ошибки... Я просто пытаюсь понять, почему git выражает свое сообщение таким образом - независимо от того, выбрана ли сама формулировка плохо или существует ли какая-то базовая концепция git, которая заставляет их слово это так и я не понимаю правильно.

подробнее
вот что, я думаю, может быть важной частью вывода git config -l

remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.url=https://code.google.com/a/google.com/p/xxxxx/
branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.master.mergeoptions=--no-ff
4b9b3361

Ответ 1

Ты уже об этом думаешь. В сообщении не говорится, что пульт дистанционного управления позади. Он говорит, что ваш локальный репозиторий зафиксировал фиксацию для "origin/master" . Ни при каких обстоятельствах при создании этого сообщения git не связывался с удаленным. Он просто заглянул в каталог .git и вернул содержимое .git/refs/remotes/origin/master. Попробуй сам. Обе эти команды должны возвращать то же самое с верхнего уровня репозитория:

cat .git/refs/remotes/origin/master
git rev-parse origin/master

Вторая команда - это просто команда сантехника для поиска указателя 'origin/master'. Вы можете заменить "origin/master" любой веткой, чтобы получить самую последнюю фиксацию в этой ветке.

Это сообщение сообщает вам, что ваш локальный "мастер" опережает коммит, возвращенный "git rev-parse origin/master" на 857 коммитов. Как возникла эта ситуация? Я не могу сказать точно, но я потратил немалые деньги на вас, случайно объединив другую ветку в "мастер" . Каждый раз, когда я видел эту проблему, это плохое слияние с ошибкой пользователя.

Во-первых, введите git fetch origin, чтобы убедиться, что указатель "origin/master" обновлен. Затем изучите свой git log. Ищите что-то недавнее, чего вы не ожидаете. Загрузите программу типа tig или используйте gitk, чтобы получить визуальный график вашей истории фиксации. Это хорошая ставка, которую вы случайно выпустили git pull stable, пока вы проверили "мастер" . Или что-то подобное.

Ответ 2

git rebase -p

Он скажет First, rewinding head to replay your work on top of it..., и все будет готово, потому что нет никакой работы для воспроизведения.

Ответ 3

У меня тоже был этот вопрос. Я немного искал и узнал, что мы иногда запускаем "git pull upstream master", чтобы получать последние изменения от ведущего мастера до нашего локального мастера, который является разветвленной ветвью. Однако эти обновленные изменения еще не доведены до нашего удаленного мастера. Следовательно, в сообщении говорится, что "наш локальный х - значит, что он стоит перед удаленным мастером". Прежде чем приступать к новому коду или модификации в среде разветвленной ветки, лучше запустить следующие команды

git checkout master_branch;
git вытащить вверх по течению хозяина

git push

Ответ 4

В конце, Актуальное решение для решения проблемы:

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

    $ git status ./
On branch master-blah1
Your branch is ahead of 'origin/master-blah1' by 869 commits.
  (use "git push" to publish your local commits)
nothing to commit, working directory clean


    $ git push
    Counting objects: 7, done.
    Delta compression using up to 48 threads.
    Compressing objects: 100% (7/7), done.
    Writing objects: 100% (7/7), 653 bytes | 0 bytes/s, done.
    Total 7 (delta 4), reused 0 (delta 0)

$ git status ./
On branch master-blah1
Your branch is up-to-date with 'origin/master-blah1'.
nothing to commit, working directory clean

Ответ 5

Я была такая же проблема. Как указывает выбранное решение, я думаю, что проблема в том, что указатель источника/мастера устарел. Я в основном только делаю git pull origin master а не fetch.

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

git reset --hard origin/master
git fetch origin
git pull origin master

Надеюсь, это поможет кому-то и в будущем.

Изменение: также полезно По этому другому вопросу я нашел отличное решение с полезными командами. Это сработало для меня, когда вышеперечисленное не сработало!