git traction dit la mise à jour, mais git push rejette non-avance rapide
Question
Je viens tiré une nouvelle branche, fait quelques changements locaux, engagés et essayé de pousser. On m'a donné cette erreur: ! [rejected] groups -> groups (non-fast forward)
Alors j'ai essayé de tirer, mais on m'a dit Already up-to-date.
Voici ce que je me tirant ensuite pousser.
~/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'
Quelqu'un peut-il expliquer comment cela peut se produire et comment je peux résoudre ce problème?
La solution
Lorsque vous avez tiré la branche, avez-vous utilisé l'option « --track » (afin de vous garder branche locale de suivi à distance de la branche). Si vous ne l'avez pas, il peut expliquer que la commande « fusion » qui ne fonctionne pas.
Vous pouvez faire la fusion manuellement:
git fetch
git merge origin/groups
Pour comparer repo local et à distance, je vous suggère de cette commande (ajouter dans un alias, il est utile):
git log --graph --oneline --all --decorate
Il imprime l'arbre historique du projet, montrant les étiquettes de branche. Alors, vous verrez où votre branche et la branche de diverger origine.
Remarque: si vous souhaitez conserver une histoire linéaire, au lieu d'une « fusion », vous pouvez faire un « rebasage » de votre branche locale de la télécommande avant de pousser:
git rebase origin/groups
git push origin groups
Autres conseils
Je suis venu ici avec un autre problème.
Mon git a été mis en place pour pousser toutes les branches. J'étais sur une FOO branche, mais il a également essayé de pousser maître, qui n'a pas été mise à jour. L'astuce remarquait qu'il essayait de maître pousser:
To git@git.machine:repo
! [rejected] master -> master (non-fast-forward)
J'ajouté ce qui suit à mon .gitconfig seulement pousser la branche actuelle par défaut:
[push]
default = current
Ce n'est pas une réponse à la question posée. J'ai eu un autre problème avec le même message d'erreur.
Ma branche locale n'a pas la branche à distance pour tirer les changements de configuration correctement [git pull]. Cela était évident o / p de git remote show origin
. Donc, je devais utiliser git pull origin <branch_name>
au lieu de git pull
pour tirer les changements.