Votre branche est en avance sur 'origine / master' par 3 commits

354

Je reçois les éléments suivants lors de l'exécution git status

Your branch is ahead of 'origin/master' by 3 commits.

J'ai lu sur un autre post la façon de résoudre ce problème, git pull --rebasemais qu'est-ce que le rebase exactement, vais-je perdre des données ou est-ce un moyen simple de synchroniser avec le maître?

FluxEngine
la source
19
Je ne pense pas que ce soit un doublon ... Cette question demande ce que cela signifie, tandis que l'autre question demande comment rejeter les modifications.
onionjake
11
Comment cela a-t-il été marqué comme doublon par tant de personnes? La question indique évidemment que la personne ne veut pas perdre ses changements. Ils ont apporté des modifications et sont confus par le message. La soi-disant question en double ferait perdre à la personne ses modifications.
Derek Greer
4
Je dois dire que la question liée à ce qui précède n'est pas vraiment un double de cette question ...
Dave Kanter
15
@DerekGreer: comment cela a-t-il été marqué comme doublon? Parce que la plupart des gens qui marquent les questions comme des doublons ne prennent pas la peine de lire et de comprendre la question. S'il y a des similitudes superficielles, ils concluront que les deux sont identiques, et il appartiendra au PO ou à d'autres qui sont prêts à prendre le temps de répéter soigneusement ce qui aurait dû être évident en premier lieu, si le les chasseurs de dupes s'étaient vraiment occupés de faire attention.
iconoclaste
6
^^^ dont la pratique tue SO, IMO.
Geek Stocks

Réponses:

767

Vous obtenez ce message parce que vous avez apporté des modifications à votre maître local et que vous ne les avez pas poussés à distance. Vous avez plusieurs façons de le "résoudre" et cela dépend normalement de l'apparence de votre flux de travail:

  • Dans un bon flux de travail, votre copie distante du maître doit être la bonne tandis que votre copie locale du maître n'est qu'une copie de celle de la télécommande. En utilisant ce workflow, vous ne recevrez plus jamais ce message.
  • Si vous travaillez d'une autre manière et que vos modifications locales doivent être poussées, git push originsupposez simplement que l'origine est votre télécommande
  • Si vos modifications locales sont mauvaises, supprimez-les ou réinitialisez votre maître local à l'état sur la télécommande git reset --hard origin/master
iberbeu
la source
82
git reset --hard origin / master est exactement ce que je cherchais. Merci.
FluxEngine
4
@iberbeu vous avez résolu ma journée ... git reset --hard origin / master est ce que je recherche. +1
Ravi
75
Aussi fwiw git diff master origin/master(c.-à-d. git diff local remote) Pour voir les changements que vous supprimerez
Shanimal
1
J'ai local / master sur l'origine / la branche distante, donc en utilisant git push origin master:branchqui est retourné Everything up-to-date, après quoi le message d'être en avance par x commits est parti.
fyrye
2
Le dernier m'a donné ce dont j'avais besoin!
RyanG
38

Il n'y a rien à réparer. Vous avez simplement effectué 3 validations et ne les avez pas encore déplacées vers la branche distante. Il existe plusieurs options, selon ce que vous voulez faire:

  • git push: déplacez vos modifications vers la télécommande (cela pourrait être rejeté s'il y a déjà d'autres modifications sur la télécommande)
  • ne rien faire et continuer à coder, synchroniser un autre jour
  • git pull: récupérez les modifications (le cas échéant) de la télécommande et fusionnez-les dans vos modifications
  • git pull --rebase: comme ci-dessus, mais essayez de refaire vos validations en plus des modifications à distance

Vous êtes dans une situation classique (bien que vous n'engagiez généralement pas beaucoup sur master dans la plupart des workflows). Voici ce que je ferais normalement: revoir mes modifications. Peut-être faire un git rebase --interactivepour faire des cosmétiques sur eux, laisser tomber ceux qui sucent, les réorganiser pour les rendre plus logiques. Déplacez-les maintenant vers la télécommande avec git push. Si cela est rejeté parce que ma succursale locale n'est pas à jour: git pull --rebaserefaire mon travail en plus des dernières modifications et git pushencore.

pmr
la source
J'ai utilisé git pull --rebase, mais il dit maintenant que je suis en avance d'un commit
FluxEngine
J'ai donc fait les changements, poussé à maîtriser, puis notre chef d'équipe a fusionné pour maîtriser. Donc, les changements sont là, j'ai juste besoin d'être synchronisé avec le maître actuel.
FluxEngine
@MartyMcFly Il est difficile de voir ce qui se passe ici. Vous dites que vous avez déjà poussé? Alors, pourquoi commettez-vous toujours qui ne sont pas sur master? Qu'entendez-vous par your team lead merged to master? N'avez-vous pas dit que vous aviez déjà poussé à maîtriser? Que contient le commit supplémentaire? Essayez git diff origin/masterde voir en quoi votre succursale locale diffère de la télécommande.
pmr
1
merci pour l'aide, désolé si j'ai mal expliqué la situation. Mais ce que je cherchais, c'est git reset --hard origin / master. Mais votre réponse a été utile +1.
FluxEngine
J'ai l'impression d'être coincé entre un rocher et un endroit dur, j'ai essayé de commettre des changements, puis git a dit: tu es en avance 11 commits. Je ne suis pas autorisé à mettre à jour le référentiel distant, donc une poussée n'est pas possible. "git pull" dit: Déjà à jour. J'ai donc essayé votre troisième suggestion, mais ensuite git dit: impossible de tirer avec rebase: vous avez des modifications non mises en scène. veuillez les valider ou les ranger. Duh, c'est comme ça que je suis arrivé ici en premier lieu :-(
Sander de Jong
36

Utilisez ces 4 commandes simples

Étape 1 :git checkout <branch_name>

C'est évident d'aller dans cette branche.

Étape 2 :git pull -s recursive -X theirs

Prenez les modifications de branche distante et remplacez-les par leurs modifications en cas de conflit. Ici, si vous le faites, git statusvous obtiendrez quelque chose comme ça, votre branche est en avance sur «origine / maître» par 3 commits.

Étape 3 :git reset --hard origin/<branch_name>

Étape 4 :git fetch

Réinitialisez votre branche.

Prendre plaisir.

Abhishek Goel
la source
17

Je suis tombé sur ce problème après avoir fusionné une demande d'extraction sur Bitbucket.

Devais faire

git fetch

et c'était tout.

pragman
la source
2
Je travaillais avec un référentiel à partir d'un bundle et j'ai pu me débarrasser du message en appliquant "git fetch" à un bundle actuel. tnx!
Martin Meeser
Lors d'un paiement en lecture seule, mon statut git a montré que j'avais 2 validations d'avance, le journal semblait comme il le devrait - tous les validations à l'origine. J'ai fait un git pull et j'avais 5 commits d'avance..WTF ???? Juste besoin d'aller chercher pour rafraîchir les index locaux ... tout va bien :)
Chris Rutledge
12

Habituellement, si je dois vérifier quels sont les commits qui diffèrent du master que je fais:

git rebase -i origin/master

De cette façon, je peux voir les commits et décider de le supprimer ou de choisir ...

Alex
la source
Cette réponse humble tout au long d'ici était ce que je devais faire. Je n'arrivais pas à comprendre comment trouver la différence, et toutes mes différentes git diff ...magies ne fonctionneraient pas. Quand je l'ai fait, cela m'a donné noople seul commit, et quand je l'ai accepté, maintenant ma branche est synchronisée avec origin / master. Il semble donc que les validations diff de origin / master n'étaient en fait rien.
philo vivero
11

Ce message de gitsignifie que vous avez effectué trois validations dans votre masterréférentiel local et que vous ne les avez pas publiées dans le référentiel. La commande à exécuter pour cela est git push {local branch name} {remote branch name}.

La commande git pull(et git pull --rebase) concerne l'autre situation lorsqu'il y a une validation sur le référentiel distant que vous n'avez pas dans votre référentiel local. L' --rebaseoption signifie que vous gitallez déplacer votre commit local de côté, synchroniser avec le dépôt distant, puis essayer d'appliquer vos trois commit à partir du nouvel état. Il peut échouer en cas de conflit, mais vous serez ensuite invité à les résoudre. Vous pouvez également abandonner le rebasesi vous ne savez pas comment résoudre les conflits à l'aide de git rebase --abortet vous reviendrez à l'état avant d'exécuter git pull --rebase.

Sylvain Defresne
la source
7

Si votre git dit que vous êtes engagé à l'avance, alors tout d'abord,

git push origine

Pour vous assurer que vous avez poussé tous vos derniers travaux dans le repo

Alors,

git reset --hard origin / master

Pour réinitialiser et correspondre avec le référentiel

Pratik Khadka
la source
4

Cela m'est arrivé une fois après avoir fusionné une demande d'extraction sur Bitbucket.

Je devais juste faire:

git fetch

Mon problème a été résolu. J'espère que ça aide!!!

Sudhir Vishwakarma
la source
0
$ git fetch

  - remote: Enumerating objects: 3, done.
  - remote: Counting objects: 100% (3/3), done.
  - remote: Compressing objects: 100% (3/3), done.
  - remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0


$ git pull 

   - Already up to date!
   - Merge made by the 'recursive' strategy.

enfin:

$ git push origin
sandes
la source