git: votre branche est en avance de x commits

comment cela se fait-il?

je travaille seul en ce moment, donc c'est mon workflow:

  1. Modifier les fichiers
  2. Commit
  3. répéter 1-2 jusqu'à satisfaction
  4. Push to master

puis quand je fais un git status il me dit que ma branche est devant par X commet (probablement le même nombre de commits que j'ai fait). Est-ce parce que lorsque vous appuyez sur le code il ne met pas réellement à jour vos fichiers mis en cache localement (dans le .git dossiers)? git pull semble "corriger" ce message étrange, mais je suis toujours curieux de savoir pourquoi cela se produit, peut-être que j'utilise git mal?


y compris quelle branche est imprimée dans le message

ma branche locale est en avance sur le maître

où voulez-vous de pousser/tirer la branche courante

je pousse vers GitHub et je tire vers n'importe quel ordinateur sur lequel je travaille à ce moment-là, ma copie locale est toujours entièrement à jour car je suis le seul à travailler dessus.

il ne fait pas de vérifier la distance repo

C'est ce que je pensais, j'ai pensé que je ferais en sorte que ma compréhension de celui-ci était correct.

vous lui donnez des arguments supplémentaires?

pas ceux que je peux voir, peut-être qu'il y a une drôle de config sur ma fin?

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
316
demandé sur alex 2010-03-12 15:15:54

16 réponses

si vous recevez ce message après avoir fait un git pull remote branch , essayez de le suivre avec un git fetch . (Optionnellement, exécuter git fetch -p pour élaguer les branches supprimées de la pension)

Fetch semble mettre à jour la représentation locale de la branche distante, ce qui ne se produit pas nécessairement lorsque vous faites un git pull remote branch .

449
répondu Rich 2015-07-06 19:59:59

Utiliser

git pull --rebase

l'option -- rebase signifie que git va déplacer votre commit local de côté, synchroniser avec la télécommande et ensuite essayer d'appliquer vos commits à partir du nouvel état.

95
répondu Marian Zburlea 2014-03-13 15:19:52

je pense que vous avez mal compris le message - votre branche n'est pas en avance sur master , il est master . Il est en avance sur origin/master , qui est une " remote tracking branch qui enregistre l'état du dépôt distant de votre dernier push , pull , ou fetch . Il vous dit exactement ce que vous avez fait; vous avez devancé la télécommande et il vous rappelle de pousser.

48
répondu Josh Lee 2010-03-12 19:54:30

utilisez ces 3 commandes simples

Étape 1 : git checkout <branch_name>

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

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

plus de détails: https://stackoverflow.com/a/39698570/2439715

de Profiter de.

42
répondu Abhishek Goel 2017-05-23 12:02:51

Quelqu'un a dit que vous pourriez mal interpréter votre message, vous ne l'êtes pas. Ce problème concerne en fait votre fichier <project>/.git/config . Il y aura une section semblable à celle-ci:

[remote "origin"]
    url = <url>
    fetch = +refs/heads/*:refs/remotes/origin/*

si vous supprimez la ligne fetch de votre projet .git/config fichier que vous allez arrêter les "Votre branche est en avance de 'origin/master' par N s'engage."la gêne de se produire.

du moins, je l'espère. :)

26
répondu Fake Code Monkey Rashid 2010-12-04 02:44:29

j'ai eu ce problème sur mon serveur de scène où je ne tire que. Et hard reset m'a aidé à nettoyer la TÊTE à la même distance.

git reset --hard origin/master

donc maintenant j'ai à nouveau:

On branch master
Your branch is up-to-date with 'origin/master'.
7
répondu Anatolii Pazhyn 2016-09-06 09:28:03

dans mon cas, c'est parce que je suis passé à master en utilisant

 git checkout -B master

juste pour tirer la nouvelle version de celui-ci au lieu de

 git checkout master

La première commande réinitialise la tête de master à mon dernier s'engage

j'ai utilisé

git reset --hard origin/master

pour fixer que

7
répondu AxCoder 2016-12-15 07:03:26

j'ai passé en revue toutes les solutions sur cette page, et heureusement @anatolii-pazhyn a commenté parce que sa solution était celle qui a fonctionné. Malheureusement je n'ai pas assez réputation pour le soutenir, mais je recommande d'essayer sa solution en premier:

git reset --hard origin/master

qui m'a donné:

HEAD is now at 900000b Comment from my last git commit here

je recommande aussi:

git rev-list origin..HEAD
# to see if the local repository is ahead, push needed

git rev-list HEAD..origin
# to see if the local repository is behind, pull needed

vous pouvez également utiliser:

git rev-list --count --left-right origin/master...HEAD
# if you have numbers for both, then the two repositories have diverged

Bonne chance

5
répondu Ryan Erwin 2016-12-06 08:31:52

j'ai eu ce même problème sur une machine Windows. Lorsque j'exécutais une commande git pull origin master , j'obtenais l'avertissement" ahead of 'origin/master' by X commits". J'ai trouvé que si j'avais plutôt couru git pull origin et n'avais pas spécifié la branche, alors je ne recevrais plus l'avertissement.

4
répondu The Code Father 2013-09-11 18:30:01

il vous rappelle juste les différences entre la branche actuelle et la branche qui fait la piste actuelle. Veuillez fournir plus d'informations, y compris quelle branche est imprimée dans le message et où poussez-vous/tirez la branche actuelle.

2
répondu wRAR 2012-02-28 17:27:03

bien que cette question soit un peu vieille...J'étais dans une situation similaire et ma réponse ici m'a aidé à résoudre un problème similaire que j'avais

essayez d'Abord avec push -f ou de force option

si cela n'a pas fonctionné, il est possible que (comme dans mon cas) les dépôts à distance (ou plutôt les références aux dépôts à distance qui apparaissent sur git remote -v ) ne soient pas mis à jour.

résultat d'être votre push synchronisé votre local / branche avec votre remote/branche cependant, le cache dans votre repo local affiche toujours les commit (of local / branche) précédents ...a condition que seule une seule commit ait été poussée) comme tête.

pour confirmer le clone ci-dessus le repo à un endroit différent et essayer de comparer local/chef de branche et distant/chef de branche. Si elles sont toutes les deux identiques, alors vous êtes probablement confrontés à la question que j'ai fait.

Solution:

$ git remote -v
github  git@github.com:schacon/hw.git (fetch)
github  git@github.com:schacon/hw.git (push)
$ git remote add origin git://github.com/pjhyett/hw.git
$ git remote -v
github  git@github.com:schacon/hw.git (fetch)
github  git@github.com:schacon/hw.git (push)
origin  git://github.com/pjhyett/hw.git (fetch)
origin  git://github.com/pjhyett/hw.git (push)
$ git remote rm origin
$ git remote -v
github  git@github.com:schacon/hw.git (fetch)
github  git@github.com:schacon/hw.git (push)

push -f comme suit

git push -f github master ### Notez que votre commande n'a pas de origin plus!

Faire un git pull maintenant git pull github master

sur git status recevoir

# On branch master

nothing to commit (working directory clean)

j'espère que cela utile pour quelqu'un comme le nombre de vues est si élevé que la recherche pour cette erreur, Liste presque toujours ce thread en haut

référez-vous aussi à gitref pour plus de détails

2
répondu Vikram 2013-08-12 20:28:47

en fait, J'ai eu ce happening quand je faisais un commutateur/check-out Avec TortiseGIT.

mon problème était que j'avais créé la branche basée sur une autre branche locale. Il a créé une entrée "fusionner" dans /.git/config qui ressemblait à quelque chose comme ceci:

[branch "web"]
    merge = refs/heads/develop
    remote = gitserver

où chaque fois que je suis passé à la branche "web", il me disait que j'étais 100+ engage avant de développer. Je ne m'engageais plus à me développer, alors c'était vrai. J'ai été en mesure de tout simplement supprimer cette entrée et il semble fonctionner comme prévu. Il est correctement suivi avec le ref à distance au lieu de se plaindre d'être derrière la branche de développement.

comme Vikram l'a dit, ce fil de débordement de pile est le résultat principal dans Google lors de la recherche de ce problème donc j'ai pensé que je partagerais Ma situation et solution.

1
répondu Dustin Graham 2013-09-10 18:57:22

les réponses suggérant git pull ou git fetch sont correctes.

Le message est généré lorsque git status voit une différence entre .git/FETCH_HEAD et .git/refs/remotes/<repository>/<branch> (par exemple .git/refs/remotes/origin/master ).

ce dernier fichier enregistre la tête du dernier fetch (pour le dépôt/la branche). Faire git fetch met à jour les deux fichiers vers le responsable actuel de la branche.

Bien sûr, si il n'y a rien à chercher (parce que le le dépôt local est déjà à jour) alors .git/FETCH_HEAD ne change pas.

1
répondu NoBrassRing 2014-01-22 17:03:37

je voudrais réitérer la même chose que celle mentionnée par @Marian Zburlia ci-dessus. Cela a fonctionné pour moi et suggérerait la même chose aux autres.

git pull origin develop

doit être suivi de $ git pull --rebase .

cela supprimera les commentaires à venir sur le $ git status après le dernier pull.

1
répondu Partho Chatterjee 2017-11-20 16:51:30

si vous recevez ce message après avoir effectué une propagation afin de déverrouiller un fichier dans la branche, essayez de faire quelques changements dans n'importe quel fichier et effectuez une propagation. Apparemment, vous ne pouvez pas faire de commit unique qui inclut seulement untracking fichier suivi précédemment. Enfin ce post m'a aidé à résoudre l'ensemble du problème https://help.github.com/articles/removing-files-from-a-repository-s-history / . J'ai juste dû supprimer le fichier de l'historique du dépôt.

0
répondu nurb 2018-03-26 07:05:23

git fetch permettra de résoudre pour vous

si mon interprétation est correcte, votre local (en cache) origin/master est périmé. Cette commande mettra à jour l'état du dépôt à partir du serveur.

0
répondu Guillaume Racicot 2018-08-29 04:13:16