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:
- Modifier les fichiers
- Commit
- répéter 1-2 jusqu'à satisfaction
- 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)
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
.
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.
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.
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.
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. :)
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'.
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
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
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.
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.
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
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.
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.
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.
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.
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.