web-dev-qa-db-fra.com

Comment résoudre l'erreur git: "Les mises à jour ont été rejetées car le bout de votre branche actuelle est derrière"

J'ai récemment commencé à utiliser Git (auparavant, j'avais déjà utilisé Subversion, mais je travaille maintenant en collaboration sur un projet utilisant bitbucket et git).

Tout s'est bien passé jusqu'à aujourd'hui, quand j'ai découvert qu'un collègue bien intentionné avait proposé des modifications au Master au lieu de créer une branche. Cela signifie que lorsque j'essaie de commettre, j'obtiens l'erreur:

Les mises à jour ont été rejetées car le bout de votre branche actuelle est derrière

Je sais que cela devrait être résolu en faisant une demande d'extraction pour resynchroniser les choses, mais je ne veux pas perdre les modifications apportées localement et je ne veux pas non plus forcer la validation et supprimer les modifications apportées par quelqu'un d'autre. .

Quelle est la bonne approche pour me permettre de fusionner les modifications sans perdre l'une ou l'autre?

41
Finglish

Si vous avez déjà effectué des commits, vous pouvez effectuer les opérations suivantes:

git pull --rebase

Cela placera tous vos commits locaux au-dessus des modifications récemment extraites.

SOYEZ TRÈS PRUDENT AVEC CECI: cela écrasera probablement tous vos fichiers présents avec les fichiers tels qu'ils se trouvent à la tête de la branche dans le dépôt distant! Si cela se produit et que vous ne le voulez pas, vous pouvez Annuler ce changement avec

git rebase --abort 

... naturellement, vous devez le faire avant de faire de nouveaux commits!

61
Akash Agrawal

Je le ferais de cette façon:

  1. Mettez en scène tous les changements non mis en scène.

    git add .
    
  2. Cachez les changements.

    git stash save
    
  3. Sync avec la télécommande.

    git pull -r
    
  4. Réappliquez les modifications locales.

    git stash pop
    

    ou

    git stash apply
    
19
Rebecca Abriam

J'ai eu le même problème. Malheureusement, j'étais dans le mauvais niveau de catalogue.

J'ai essayé de: git Push -u Origin master -> il y avait une erreur

Puis j'ai essayé: git pull --rebase -> il y avait toujours un problème
Enfin je change de répertoire cd your_directory

Puis j'ai réessayé (git Push) et il fonctionne!

3
Paweł R

J'ai pu surmonter ce problème avec la modification suivante de Visual Studio 2017:

  1. Dans Team Explorer, accédez à Paramètres . Allez dans Paramètres globaux pour configurer cette option au niveau global. Allez dans Paramètres du référentiel pour configurer cette option au niveau du référentiel.
  2. Définissez Modifiez la branche locale lorsque vous tirez sur le réglage souhaité (pour moi, il s’agissait de True), puis sélectionnez Mettre à jour pour enregistrer.

Voir: https://docs.Microsoft.com/en-us/vsts/git/concepts/git-config?view=vsts&tabs=visual-studio#rebase-local-branch-when-pulling

1
Taersious

J'ai eu exactement le même problème sur ma branche (appelons-la branche B) et j'ai suivi trois étapes simples pour que cela fonctionne

  1. Basculé vers la branche master (git checkout master)
  2. Fait un pull sur le master (git pull)
  3. Création de la nouvelle branche (git branche C) - notez ici que nous sommes en train de passer de master
  4. Maintenant, quand vous êtes sur la branche C, fusionnez avec la branche B (git merge B)
  5. Maintenant, faites un Push (git Push Origin C) - fonctionne :)

Vous pouvez maintenant supprimer la branche B, puis renommer la branche C en branche B.

J'espère que cela t'aides.