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
, чтобы вытащить изменения.