Git pull говорит обновленный, но git push отклоняет непереходную вперед

Я только что вытащил новую ветку, сделал некоторые локальные изменения, совершил и попытался нажать. Мне была дана эта ошибка: ! [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'

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

Ответ 1

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

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

git fetch
git merge origin/groups

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

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

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

Примечание. Если вы хотите сохранить линейную историю, вместо "слияния" вы можете выполнить "переустановку" вашей локальной ветки на пульте дистанционного управления, прежде чем нажимать:

git rebase origin/groups
git push origin groups

Ответ 2

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

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

To [email protected]:repo
 ! [rejected]        master -> master (non-fast-forward)

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

[push]
    default = current

Ответ 3

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

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