Git push a rejeté la "non-avance rapide"

90

Je suis assez nouveau pour l' gitutiliser actuellement pour gérer notre code dans un environnement d'équipe. J'ai eu des problèmes de rebasage et je les ai résolus en utilisant

git checkout --ours filename.txt
git add filename.txt
git rebase --continue

Maintenant, je souhaite pousser mes modifications, et donc exécuter la commande suivante

$ git push origin feature/my_feature_branch

me donne l'erreur suivante:

To ssh://[email protected]:7999/repo/myproject.git
 ! [rejected]        feature/my_feature_branch -> feature/my_feature_branch (non-fast-forward)
error: failed to push some refs to 'ssh://[email protected]:7999/repo/myproject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Que puis-je faire pour me débarrasser de l'erreur?

PS: J'évite --forceautant que possible d'utiliser l' option.

Frankline
la source

Réponses:

76

Il semble que quelqu'un a poussé de nouveaux commits entre votre dernier git fetchet votre git push. Dans ce cas, vous devez répéter vos étapes et rebaser my_feature_branchune fois de plus.

git fetch
git rebase feature/my_feature_branch
git push origin feature/my_feature_branch

Après le git fetchje recommande d'examiner la situation avec gitk --all.

Boris Brodski
la source
Que faire pour activer git pull origin master: master qui doit par défaut être fusionné. Est-ce un conflit de fusion ou non. C'est la seule et unique question posée.
mathtick
24

Vous n'avez probablement pas récupéré les modifications à distance avant le rebase ou quelqu'un a poussé de nouvelles modifications (pendant que vous rebasiez et essayiez de pousser). Essayez ces étapes:

#fetching remote 'feature/my_feature_branch' branch to the 'tmp' local branch 
git fetch origin feature/my_feature_branch:tmp

#rebasing on local 'tmp' branch
git rebase tmp

#pushing local changes to the remote
git push origin HEAD:feature/my_feature_branch

#removing temporary created 'tmp' branch
git branch -D tmp
Ingénieur
la source
Cela résout mon problème: quand j'ai validé mon code, j'ai fait un rebase (trop tard, il y avait déjà des changements, faut le faire avant de commettre). Alors même il n'y avait pas de conflit, je ne pouvais pas pousser. Après avoir appliqué la magie ci-dessus, cela a fonctionné. Merci.
Jing Li
19

J'ai eu ce problème! J'ai essayé: git fetch + git merge, mais je n'ai pas résolu! J'ai essayé: git pull, et également pas résolu

Ensuite, j'ai essayé ceci et j'ai résolu mon problème (est similaire à la réponse de l'ingénieur):

git fetch origin master:tmp
git rebase tmp
git push origin HEAD:master
git branch -D tmp
Aurelio A
la source
7
Cela m'a vissé, j'ai poussé des trucs directement à maîtriser et poussé le déploiement d'une journée entière ... et tout le monde est énervé .... CONSEILS IMPRESSIONNANTS!
Mike Q
6
Vous voulez probablement expliquer ce que vous faites en résumé avant de donner à quelqu'un un outil dangereux.
Mirv - Matt
10

J'ai eu un problème similaire et je l'ai résolu avec: git pull origin

William Rossier
la source
1
M'a aidé lorsque j'ai reçu l'erreur en question lors de l'extraction d'une branche distante.
GChuf
7

Je suis en retard à la fête mais j'ai trouvé des instructions utiles dans la page d'aide de github et je voulais les partager ici.

Parfois, Git ne peut pas apporter votre modification à un référentiel distant sans perdre les commits. Lorsque cela se produit, votre push est refusé.

Si une autre personne a poussé vers la même branche que vous, Git ne pourra pas appliquer vos modifications:

$ git push origin master
To https://github.com/USERNAME/REPOSITORY.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/USERNAME/REPOSITORY.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

Vous pouvez résoudre ce problème en récupérant et en fusionnant les modifications apportées sur la branche distante avec les modifications que vous avez apportées localement:

$ git fetch origin
# Fetches updates made to an online repository
$ git merge origin YOUR_BRANCH_NAME
# Merges updates made online with your local work

Ou, vous pouvez simplement utiliser git pullpour exécuter les deux commandes à la fois:

$ git pull origin YOUR_BRANCH_NAME
# Grabs online updates and merges them with your local work
Bilal
la source
4

essayez cette commande

$ git push -f -u origin <name of branch>

c'est à dire $ git push -f -u origin master

ivever timothy
la source
Cela a fonctionné pour mon cas alors que les autres ne l'ont pas fait. Parfois, il suffit de dire à git -f -u
gcr
1

Verrou en écriture sur le référentiel local partagé

J'ai eu ce problème et aucun des conseils ci-dessus ne m'a aidé. J'ai pu tout récupérer correctement. Mais la poussée a toujours échoué. Il s'agissait d'un référentiel local situé sur le répertoire Windows avec plusieurs clients travaillant avec lui via le pilote de dossier partagé VMWare. Il est apparu que l'un des systèmes verrouillé le référentiel Git pour l'écriture. Après l'arrêt du système VMWare concerné, ce qui a provoqué le verrouillage, tout a été réparé immédiatement. Il était presque impossible de déterminer quel système causait l'erreur, j'ai donc dû les arrêter un par un jusqu'à ce que cela réussisse.

Boris Zinchenko
la source
1

Eh bien, j'ai utilisé les conseils ici et cela m'a foutu car il a fusionné mon code local directement au maître. .... alors prenez tout cela avec un grain de sel. Mon collègue a déclaré que ce qui suit avait aidé à résoudre le problème, nécessaire pour rejoindre ma succursale.

 git branch --set-upstream-to=origin/feature/my-current-branch feature/my-current-branch
Mike Q
la source
0

Dans Eclipse, procédez comme suit:

Référentiels GIT> Télécommandes> Origine> Faites un clic droit et dites chercher

Référentiels GIT> Suivi à distance> Sélectionnez votre branche et dites fusionner

Allez au projet, faites un clic droit sur votre fichier et dites Extraire depuis l'amont.

MansoorShaikh
la source
0
  1. déplacer le code vers une nouvelle branche - git branch -b tmp_branchyouwantmergedin
  2. changer pour la branche dans laquelle vous voulez fusionner - git checkout mycoolbranch
  3. réinitialiser la branche dans laquelle vous voulez fusionner - git branch reset --hard HEAD
  4. fusionne la branche tmp dans la branche souhaitée - git branch merge tmp_branchyouwantmergedin
  5. pousser à l'origine
Richard
la source
0

Voici une autre solution pour résoudre ce problème

>git pull
>git commit -m "any meaning full message"
>git push
Sheo Dayal Singh
la source
-1
  1. Annulez la validation locale. Cela annulera simplement le commit et préserve les modifications de la copie de travail
git reset --soft HEAD~1
  1. Tirez les dernières modifications
git pull
  1. Vous pouvez maintenant valider vos modifications en plus du dernier code
alk453
la source