web-dev-qa-db-fra.com

Git Push a rejeté "non-avance rapide"

Je suis assez nouveau pour git et l'utilise actuellement pour gérer notre code dans un environnement d'équipe. J'ai eu quelques problèmes de rebasement et je les ai corrigés 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?

P.S. : J'évite d'utiliser l'option --force autant que possible.

55
Frankline

Il semble que quelqu'un ait envoyé de nouveaux commits entre votre dernier git fetch et votre dernier git Push. Dans ce cas, vous devez répéter vos étapes et rediffuser my_feature_branch une fois de plus.

git fetch
git rebase feature/my_feature_branch
git Push Origin feature/my_feature_branch

Après le git fetch, je vous recommande d’examiner la situation avec gitk --all.

53
Boris Brodski

Vous n'avez probablement pas récupéré les modifications à distance avant la modification de la base ou quelqu'un a introduit de nouvelles modifications (lors de la modification de la base et de la tentative de transmission). 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
19
Engineer

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

Alors j'ai essayé ceci et résolu mon problème (est similaire de la réponse d'ingénieur):

git fetch Origin master:tmp
git rebase tmp
git Push Origin HEAD:master
git branch -D tmp
10
Aurelio A

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

Parfois, Git ne peut pas modifier votre référentiel distant sans perdre des validations. Lorsque cela se produit, votre push est refusé.

Si une autre personne a appuyé sur 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 aux modifications 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 pull pour exécuter les deux commandes à la fois:

$ git pull Origin YOUR_BRANCH_NAME
# Grabs online updates and merges them with your local work
3
Bilal

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

2
William Rossier

Verrouillage 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 aller chercher correctement. Mais Push a toujours échoué. Il s’agissait d’un référentiel local situé dans un répertoire Windows et de plusieurs clients l’utilisant 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 avoir arrêté le système VMWare concerné, ce qui a causé le verrouillage, tout a été réparé immédiatement. Il était presque impossible de savoir quel système était à l'origine de l'erreur. Je devais donc les arrêter un par un jusqu'à ce que je réussisse.

1
Boris Zinchenko

Eh bien, j’ai utilisé le conseil ici et il m’a vaincu car il fusionnait directement mon code local pour le maîtriser. .... alors prenez le tout avec un grain de sel. Mon collègue a dit que ce qui suit a aidé à résoudre le problème, il était nécessaire de réorganiser ma succursale.

 git branch --set-upstream-to=Origin/feature/my-current-branch feature/my-current-branch
1
Mike Q

Dans Eclipse, procédez comme suit:

Dépôts GIT> Télécommandes> Origine> Faites un clic droit et dites chercher

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

Allez au projet, faites un clic droit sur votre fichier et dites Fetch from upstream.

0
MansoorShaikh