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'
Может ли кто -нибудь объяснить, как это может произойти и как я могу это исправить?
Решение
Когда вы вытащили ветвь, вы использовали опцию «--лера» (чтобы сохранить локальную филиал, отслеживая удаленную ветвь). Если вы этого не сделали, это может объяснить, что команда "Merge", которая не работает.
Вы можете сделать слияние вручную:
git fetch
git merge origin/groups
Для сравнения местных и удаленных REPOS, я предлагаю вам эту команду (добавить его в псевдоним, это полезно):
git log --graph --oneline --all --decorate
Он будет распечатать дерево истории проекта, показывая ярлыки ветви. Таким образом, вы увидите, где расходятся ваша ветка и ветвь происхождения.
Примечание. Если вы хотите сохранить линейную историю, вместо «слияния» вы можете сделать «ребазу» вашего локального ветвления на пульте, прежде чем нажать:
git rebase origin/groups
git push origin groups
Другие советы
Я пришел сюда с другой проблемой.
Мой git был настроен, чтобы продвинуть все ветви. Я был в филиале, но он также пытался подтолкнуть мастера, что не было в курсе. Хитрость заключалась в том, что он пытался подтолкнуть мастера:
To git@git.machine:repo
! [rejected] master -> master (non-fast-forward)
Я добавил следующее на мой .gitconfig, чтобы только толкать текущую ветвь по умолчанию:
[push]
default = current
Это не ответ на заданный вопрос. У меня была другая проблема с одним и тем же сообщением об ошибке.
Моя локальная ветвь не имела удаленной ветви, чтобы потянуть изменения с настройки правильно [Git Pult]. Это было очевидно от O / P git remote show origin
. Отказ Итак, мне пришлось использовать git pull origin <branch_name>
вместо git pull
тянуть изменения.