Comment cela se produit-il réellement?
Je travaille dans un repo par moi-même en ce moment, voici donc mon flux de travail:
- Changer les fichiers
- Commettre
- Répétez 1-2 jusqu'à ce que vous soyez satisfait
- Poussez pour maîtriser
Ensuite, quand je fais un, git status
il me dit que ma branche est en avance par X commits (probablement le même nombre de commits que j'ai fait). Est-ce parce que lorsque vous poussez le code, il ne met pas à jour vos fichiers mis en cache localement (dans les dossiers .git)? git pull
semble «corriger» ce message étrange, mais je suis toujours curieux de savoir pourquoi cela se produit, peut-être que j'utilise mal git?
y compris quelle branche est imprimée dans le message
Ma branche locale est en avance sur le maître
où poussez-vous / tirez la branche actuelle
Je pousse vers GitHub et tire sur n'importe quel ordinateur sur lequel je travaille à ce moment-là, ma copie locale est toujours à jour car je suis la seule à y travailler.
il ne vérifie pas réellement le dépôt à distance
C'est ce que je pensais, j'ai pensé que je m'assurerais que ma compréhension était correcte.
lui passez-vous des arguments supplémentaires?
Pas ceux que je peux voir, peut-être y a-t-il une configuration amusante de mon côté?
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
la source
push
et quels sont vos paramètres de configuration distants et de branche?git status
que ne vérifie pas le référentiel distant, legit pull
fait. Si vous disposez d'une branche de suivi pour un référentiel vers lequel vous effectuez une poussée,git push
mettra à jour votre branche de suivi locale pour refléter le nouvel état de la branche distante si votre transmission réussit. C'est pourquoi j'ai posé des questions sur la configuration du demandeur, car si cela ne se passe pas correctement, il y a probablement une erreur de configuration.git status
? vraiment? mongit status
ne me dit jamais jusqu'où ma branche est en avance .. lui passez-vous des arguments supplémentaires?git status
ne va pas dans le référentiel distant pour vérifier si la branche distante a été mise à jour. Il vous indique la longueur d'avance de votre branche locale par rapport à votre branche de suivi à distance stockée localement . Le problème est qu'un normalgit push
(ainsi que l'extraction et la traction) devrait mettre à jour la branche de suivi à distance et pour le demandeur, cela ne semble pas fonctionner. Pour voir pourquoi nous devons voir à la fois la forme exacte degit push
celle-ci et la configuration du référentiel local, mais comme le demandeur a déjà accepté une réponse, je ne vois pas cela se produire maintenant.Réponses:
Si vous obtenez ce message après avoir fait un
git pull remote branch
, essayez de le suivre avec ungit fetch
. (Facultativement, exécutezgit fetch -p
pour élaguer les branches supprimées du référentiel)Fetch semble mettre à jour la représentation locale de la branche distante, ce qui ne se produit pas nécessairement lorsque vous effectuez un
git pull remote branch
.la source
Utilisation
L'option --rebase signifie que git déplacera votre commit local de côté, se synchronisera avec la télécommande et essaiera ensuite d'appliquer vos commits du nouvel état.
la source
$ git pull --rebase Current branch xyz is up to date. $ git status On branch xyz Your branch is ahead of 'origin/xyz' by 6 commits. (use "git push" to publish your local commits) nothing to commit, working tree clean
git
, et ne réécrivez jamais sans réfléchir !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
Prendre plaisir.
la source
git reset --hard origin/master
clarifié pour moi.Je pense que vous avez mal interprété le message - votre branche n'est pas en avance
master
, elle l' estmaster
. Il est avantorigin/master
, qui est une branche de suivi à distance qui enregistre l'état du dépôt distant de votre dernierpush
,pull
oufetch
. Cela vous dit exactement ce que vous avez fait; vous avez pris de l'avance sur la télécommande et cela vous rappelle de pousser.la source
Quelqu'un a dit que vous lisiez peut-être mal votre message, vous ne l'êtes pas. Ce problème est en fait lié à votre
<project>/.git/config
fichier. Il y aura une section similaire à ceci:Si vous supprimez la ligne d'extraction du fichier .git / config de votre projet, vous arrêterez le message "Votre branche est en avance sur 'origine / maître' par les
N
validations." ennui de se produire.Ou du moins j'espère. :)
la source
ahead by x commits
message. Je n'ai pas vu le message depuis un moment.J'ai eu ce problème sur mon serveur de scène où je ne tire que. Et la réinitialisation matérielle m'a aidé à nettoyer HEAD de la même manière que la télécommande.
Alors maintenant, j'ai encore:
la source
Cela a fonctionné pour moi
git reset --hard origin/master
La sortie doit ressembler à
On branch dev HEAD is now at ae1xc41z Last commit message
la source
Dans mon cas, c'est parce que je suis passé au master en utilisant
Juste pour en tirer la nouvelle version au lieu de
La première commande réinitialise le chef du maître à mes derniers commits
j'ai utilisé
Pour résoudre ce problème
la source
J'ai parcouru toutes les solutions sur cette page, et heureusement @ anatolii-pazhyn a commenté parce que sa solution était celle qui fonctionnait. Malheureusement, je n'ai pas assez de réputation pour le voter, mais je recommande d'essayer d'abord sa solution:
Ce qui m'a donné:
Je recommande également:
Vous pouvez aussi utiliser:
Bonne chance
la source
J'ai eu ce même problème sur une machine Windows. Lorsque j'exécutais une
git pull origin master
commande, j'obtenais l'avertissement "en avance sur 'origine / maître' par X commits". J'ai trouvé que si je courais à la placegit pull origin
et ne spécifiais PAS la branche, je ne recevrais plus l'avertissement.la source
git fetch
coulisses.Il vous rappelle simplement les différences entre la branche actuelle et la branche qui fait la piste actuelle. Veuillez fournir plus d'informations, y compris la branche imprimée dans le message et où pousser / tirer la branche actuelle.
la source
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 forcez l'optionSi cela ne fonctionne pas, il est possible que (comme dans mon cas) les référentiels distants (ou plutôt les références aux référentiels distants qui s'affichent
git remote -v
) ne soient pas mis à jour.Le résultat de ce qui précède étant que votre push a synchronisé votre branche / locale avec votre branche / distante, le cache de votre référentiel local affiche toujours la validation précédente (de la branche / locale ... à condition qu'une seule validation ait été poussée) en tant que HEAD.
Pour confirmer le clonage ci-dessus, le référentiel à un emplacement différent et essayez de comparer le HEAD local / de branche et le HEAD distant / de branche. S'ils sont tous les deux identiques, vous êtes probablement confronté au problème que j'ai rencontré.
Solution:
Maintenant, procédez
push -f
comme suitgit push -f github master
### Notez que votre commande n'en aorigin
plus!Faites un
git pull
maintenantgit pull github master
à la
git status
réception# On branch master
nothing to commit (working directory clean)
J'espère que cela est utile pour quelqu'un car le nombre de vues est si élevé que la recherche de cette erreur répertorie presque toujours ce fil en haut
Voir également gitref pour plus de détails
la source
En fait, cela s'est produit lorsque je faisais un changement / paiement 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 de «fusion»
/.git/config
qui ressemblait à ceci:Lorsque, chaque fois que je passais à la branche "Web", cela me disait que j'avais plus de 100 engagements avant de développer. Eh bien, je ne m'engageais plus à me développer, c'était vrai. J'ai pu simplement supprimer cette entrée et elle semble fonctionner comme prévu. Il suit correctement la référence distante au lieu de se plaindre d'être derrière la branche de développement.
Comme Vikram l'a dit, ce fil Stack Overflow est le meilleur résultat de Google lors de la recherche de ce problème, j'ai donc pensé partager ma situation et ma solution.
la source
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
devrait être suivi de
$ git pull --rebase
.Cela supprimera les commentaires à venir
$ git status
après la dernière traction.la source
git fetch
va résoudre cela pour vousSi ma compréhension est correcte, votre local (mis en cache)
origin/master
est obsolète. Cette commande mettra à jour l'état du référentiel à partir du serveur.la source
Mon expérience est dans un environnement d'équipe avec de nombreuses branches. Nous travaillons dans nos propres branches de fonctionnalités (dans les clones locaux) et c'est l'une de celles qui a
git status
montré que j'avais 11 engagements à venir. Mon hypothèse de travail, comme l'auteur de la question, était que +11 provenait de mes propres commits .Il s'est avéré que j'avais apporté des modifications de la
develop
branche commune à ma branche de fonctionnalités plusieurs semaines plus tôt - mais j'ai oublié! Lorsque j'ai revu ma branche de fonctionnalités locales aujourd'hui et que j'ai fait ungit pull origin develop
chiffre, je suis passé à +41 commits. Beaucoup de travail avait été fait dansdevelop
et donc ma branche de fonctionnalité locale était encore plus en avance sur la branche de fonctionnalité sur leorigin
référentiel.Donc, si vous obtenez ce message, repensez à tous les pulls / fusions que vous auriez pu faire à partir d'autres branches (de votre choix ou d'autres) auxquelles vous avez accès. Le message indique simplement que vous avez besoin de
git push
cespull
modificationsorigin
référentiel (`` branche de suivi '') de votre référentiel local pour synchroniser les choses.la source
Les réponses qui suggèrent
git pull
ougit fetch
sont correctes.Le message est généré quand
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 le HEAD de la dernière extraction (pour le référentiel / la branche). Faire
git fetch
met à jour les deux fichiers à la tête actuelle de la branche.Bien sûr, s'il n'y a rien à récupérer (car le référentiel local est déjà à jour),
.git/FETCH_HEAD
cela ne change pas.la source
.git/FETCH_HEAD
contient9f7336c873ccffc772168bf49807e23ff74014d3 branch 'master' of URL
et.git/refs/remotes/origin/master
contient9f7336c873ccffc772168bf49807e23ff74014d3
, pourtant je reçois toujours le message et nigit pull
ne legit fetch
résoutSi vous obtenez ce message après avoir effectué une validation afin de ne pas suivre le fichier dans la branche, essayez d'apporter des modifications dans n'importe quel fichier et effectuez une validation. Apparemment, vous ne pouvez pas faire de commit unique qui ne comprend que le suivi du fichier précédemment suivi. Enfin, ce message m'a aidé à résoudre tout le problème https://help.github.com/articles/removing-files-from-a-repository-s-history/ . Je viens de supprimer le fichier de l'historique du référentiel.
la source