Git Pull говорит, что в курсе, но Git Push отклоняет не-вперед - PullRequest
34 голосов
/ 30 ноября 2010

Я только что вытащил новую ветку, внес некоторые локальные изменения, зафиксировал и попытался нажать.Я получил эту ошибку: ! [rejected] groups -> groups (non-fast forward) Поэтому я попытался вытащить, но мне сказали, что Already up-to-date.

Вот что я получаю, затем нажимаю.

~/dev$ git pull origin groups
Already up-to-date.
~/dev$ git push origin groups
To /mnt/ebs/git/repo.git
 ! [rejected]        groups -> groups (non-fast forward)
error: failed to push some refs to '/mnt/ebs/git/repo.git'

Может кто-нибудь объяснить, как это можночто происходит и как я могу это исправить?

Ответы [ 3 ]

22 голосов
/ 30 ноября 2010

Когда вы вытягивали ветку, вы использовали опцию «--track» (чтобы ваша локальная ветка отслеживала удаленную ветку). Если вы этого не сделали, это может объяснить, что команда «слияния» не работает.

Вы можете сделать слияние вручную:

git fetch
git merge origin/groups

Чтобы сравнить локальные и удаленные репозитории, я предлагаю вам эту команду (добавьте ее в псевдоним, она полезна):

git log --graph --oneline --all --decorate

Распечатает дерево истории проекта, показывая метки веток. Таким образом, вы увидите, где ваша ветвь и ветвь происхождения расходятся.

Примечание: если вы хотите сохранить линейную историю, вместо «слияния», вы можете выполнить «ребаз» вашей локальной ветки на пульте, прежде чем нажать:

git rebase origin/groups
git push origin groups
5 голосов
/ 27 июля 2012

Я пришел сюда с другой проблемой.

Мой мерзавец был настроен на push всех веток.Я был на ветке FOO, но он также пытался подтолкнуть мастера, который не был в курсе.Хитрость была в том, что он пытался подтолкнуть мастера:

To git@git.machine:repo
 ! [rejected]        master -> master (non-fast-forward)

Я добавил следующее в свой .gitconfig, чтобы по умолчанию пушить только текущую ветку:

[push]
    default = current
2 голосов
/ 02 мая 2016

Это не ответ на заданный вопрос.У меня была другая проблема с тем же сообщением об ошибке.

В моей локальной ветке не было удаленной ветки, чтобы вытащить изменения из правильно настроенного [git pull]Это было видно из о / п git remote show origin.Поэтому мне пришлось использовать git pull origin <branch_name> вместо git pull, чтобы вытащить изменения.

...