Ваша ветка опережает 'origin / master' на 3 коммита


354

Я получаю следующее при запуске git status

Your branch is ahead of 'origin/master' by 3 commits.

В другом посте я читал, что способ исправить это - запустить, git pull --rebaseно что именно представляет собой rebase, я потеряю данные или это простой способ синхронизации с master?


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

11
Как это было отмечено как дубликат таким количеством людей? Вопрос, очевидно, указывает на то, что человек не хочет терять свои изменения. Они внесли изменения и смущены сообщением. Так называемый дублирующий вопрос заставил бы человека потерять свои изменения.
Дерек Грир,

4
Я должен сказать, что вопрос, связанный с вышеупомянутым, на самом деле не является дубликатом этого вопроса ...
Дейв Кантер

15
@DerekGreer: как это было отмечено как дубликат? Потому что большинство людей, которые помечают вопросы как дубликаты, не удосуживаются прочитать и понять вопрос. Если есть поверхностное сходство, они придут к выводу, что оба они идентичны, и это будет зависеть от ФП или других, которые готовы потратить время, чтобы тщательно повторить то, что должно было быть очевидно в первую очередь, если Охотники на дураков действительно старались обратить внимание.
иконоборчество

6
^^^ практика которого убивает ТАК, ИМО.
Geek Stocks

Ответы:


768

Вы получаете это сообщение, потому что вы внесли изменения в свой локальный мастер и не отправили их на удаленный компьютер. У вас есть несколько способов «решить» это, и обычно это зависит от того, как выглядит ваш рабочий процесс:

  • В хорошем рабочем процессе ваша удаленная копия мастера должна быть хорошей, в то время как ваша локальная копия мастера - это просто копия удаленной. Используя этот рабочий процесс, вы никогда не получите это сообщение снова.
  • Если вы работаете по-другому и ваши локальные изменения должны быть перенесены, тогда просто git push originпредполагайте, что ваш удаленный источник
  • Если ваши локальные изменения плохие, просто удалите их или сбросьте локальный мастер в состояние на удаленном git reset --hard origin/master

82
git reset --hard origin / master это именно то, что я искал. Спасибо.
FluxEngine

4
@iberbeu ты решил мой день ... git reset --hard origin / master - это то, что я ищу. +1
Рави

75
Также FWIW git diff master origin/master(то есть. git diff local remote) , Чтобы увидеть изменения , которые вы будете извлекать
Shanimal

1
У меня есть local / master на удаленном источнике / ветке, поэтому использование git push origin master:branchкоторого вернуло Everything up-to-date, после чего сообщение о том, что x коммитов впереди, ушло.
фырье

2
Последний получил мне то, что мне было нужно там!
RyanG

38

Там нет ничего, чтобы исправить. Вы просто сделали 3 коммита и еще не перенесли их в удаленную ветку. Есть несколько вариантов, в зависимости от того, что вы хотите сделать:

  • git push: перенести ваши изменения на пульт (это может быть отклонено, если уже есть другие изменения на пульте)
  • ничего не делать и продолжать кодировать, синхронизировать другой день
  • git pull: получить изменения (если они есть) с пульта и объединить их с вашими изменениями
  • git pull --rebase: как указано выше, но попробуйте повторить ваши коммиты поверх удаленных изменений

Вы находитесь в классической ситуации (хотя обычно в большинстве рабочих процессов вы не много делаете для мастера). Вот что я обычно делаю: Просмотрите мои изменения. Может быть, git rebase --interactiveсделать косметику на них, отбросить те, которые сосут, изменить их порядок, чтобы сделать их более логичными. Теперь перенесите их на пульт с git push. Если это будет отклонено, потому что мое местное отделение не обновлено: git pull --rebaseпеределать мою работу поверх последних изменений и еще git pushраз.


Я использовал git pull --rebase, но теперь он говорит, что я впереди на один коммит
FluxEngine

Так что я внес изменения, подтолкнул к мастеру, а затем руководство нашей команды слилось с мастером. Так что изменения есть, мне просто нужно синхронизироваться с текущим мастером.
FluxEngine

@MartyMcFly Трудно увидеть, что здесь происходит. Вы говорите, что уже подтолкнули? Так почему же вы все еще делаете коммиты, которые не на мастере? Что вы имеете в виду your team lead merged to master? Разве вы не говорили, что уже подталкивали к мастеру? Что содержит дополнительный коммит? Попробуйте git diff origin/masterпосмотреть, чем ваша локальная ветка отличается от удаленной.
ПМР

1
спасибо за помощь, извините, если я сделал плохую работу, объясняя ситуацию. Но то, что я искал, это git reset --hard origin / master. Но ваш ответ был полезен +1.
FluxEngine

Кажется, я застрял между молотом и наковальней, я попытался внести изменения, а затем Git сказал: вы впереди 11 коммитов. Мне не разрешено обновлять удаленный репозиторий, поэтому принудительная отправка невозможна. "Git Pull" говорит: уже в курсе. Итак, я попробовал ваше третье предложение, но затем git говорит: не могу тянуть с ребазом: у вас есть неустановленные изменения. пожалуйста, зафиксируйте или спрячьте их. Дух, вот как я попал сюда в первую очередь :-(
Сандер де Йонг

36

Используйте эти 4 простые команды

Шаг 1 :git checkout <branch_name>

Это очевидно, чтобы пойти в эту ветку.

Шаг 2 :git pull -s recursive -X theirs

Примите изменения в удаленной ветви и замените их изменениями, если возникнет конфликт. Здесь, если вы это сделаете, git statusвы получите что-то вроде этого, ваша ветка опережает 'origin / master' на 3 коммита.

Шаг 3 :git reset --hard origin/<branch_name>

Шаг 4 :git fetch

Хард ресет вашей ветки.

Наслаждаться.


17

Наткнулся на эту проблему после того, как я объединил запрос на получение Bitbucket.

Должен сделать

git fetch

и это было все.


2
Я работал с репо из пакета и смог избавиться от сообщения, применив «git fetch» ​​к текущему пакету. TNX!
Мартин Мизер

На кассе только для чтения мой git-статус показал, что я впереди на 2 коммита, журнал выглядел как надо - все коммиты в источнике. Я сделал git pull и был на 5 коммитов вперед .. WTF ???? Нужно просто загрузить обновления, чтобы обновить локальные индексы ... все хорошо :)
Крис Ратледж,

12

Обычно, если мне нужно проверить, какие коммиты отличаются от мастера, который я делаю:

git rebase -i origin/master

Таким образом, я вижу коммиты и решаю сбросить их или выбрать ...


Этот скромный ответ на всем пути здесь был тем, что мне нужно было сделать. Я не мог понять, как выяснить разницу, и все мои разные git diff ...магики не сработали. Когда я сделал это, он дал мне noopединственный коммит, и когда я принял его, теперь моя ветвь синхронизирована с origin / master. Таким образом, кажется, что коммиты diff от origin / master были фактически ничем.
Philo Vivero

11

Это сообщение gitозначает, что вы сделали три коммита в своем локальном репо и не опубликовали их в masterрепозитории. Команда для запуска это git push {local branch name} {remote branch name}.

Команда git pullgit pull --rebase) предназначена для другой ситуации, когда в удаленном репо есть коммит, которого нет в вашем локальном репо. Эта --rebaseопция означает, что gitвы отодвинете локальный коммит в сторону, синхронизируете его с удаленным репо, а затем попытаетесь применить ваш три коммита из нового состояния. Он может потерпеть неудачу, если есть конфликт, но тогда вам будет предложено разрешить их. Вы также можете прервать операцию, rebaseесли не знаете, как разрешить конфликты с помощью команды, git rebase --abortи вы вернетесь в состояние перед запуском git pull --rebase.


7

Если ваш мерзавец говорит, что вы впереди, тогда просто сначала

git push origin

Чтобы убедиться, что вы продвинули всю свою последнюю работу в репо

Затем,

git reset --hard origin / master

Сбросить и сопоставить с репо


4

Это случилось со мной однажды после того, как я объединил запрос на удаление данных на Bitbucket.

Я просто должен был сделать:

git fetch

Моя проблема была решена. Надеюсь, это поможет!!!


0
$ git fetch

  - remote: Enumerating objects: 3, done.
  - remote: Counting objects: 100% (3/3), done.
  - remote: Compressing objects: 100% (3/3), done.
  - remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0


$ git pull 

   - Already up to date!
   - Merge made by the 'recursive' strategy.

наконец-то:

$ git push origin
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.