git: Votre branche est en avance par X s'engage
Comment ce fait-il arriver?
Je travaille dans un repo par moi-même en ce moment, donc c'est mon flux de travail:
- Modifier des fichiers
- Commettre
- Répéter 1-2 jusqu'à satisfaction
- Pousser à maîtriser
Alors quand je fais un git status
il me dit que ma direction est à l'avance par X s'engage (probablement le même nombre de commits que j'ai fait). Est-ce parce que lorsque vous appuyez sur le code il ne fait pas de mise à jour de vos fichiers mis en cache localement (dans l' .git dossiers)? git pull
semble "réparer" cette étrange message, mais je suis toujours curieux de savoir pourquoi il se produit, peut-être que je suis à l'aide de git mal?
y compris la branche est imprimé dans le message
Ma branche locale est en avance de maître
où voulez-vous de pousser/tirer la branche courante
Je suis poussant à GitHub et en tirant à l'ordinateur, j'arrive de travailler sur ce point dans le temps, ma copie locale est toujours parfaitement à jour que je suis le seul à travailler sur elle.
il ne fait pas de vérifier la distance repo
C'est ce que j'ai pensé, j'ai pensé que je voudrais m'assurer que ma compréhension est correcte.
vous êtes de passage quelques arguments supplémentaires pour elle?
Pas ceux que je peux voir, peut-être qu'il y a de drôles 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)
- Comment faites-vous les
push
et quelles sont vos à distance et de la direction générale paramètres de configuration? - il ne fait pas de vérifier la distance repo, vous avez besoin de faire un git fetch fetch les informations les plus récentes sur la télécommande repo après l'exécution de la push, ce sera la mise à jour du local "à distance" de la branche qu'il utilise pour suivre contre.
- Alors que
git status
ne vérifie pas le dépôt distant,git pull
n'. Si vous disposez d'un suivi de la direction générale pour un dépôt que vous pousser à,git push
mise à jour de votre local de suivi de la branche afin de refléter le nouvel état de la branche distante si vos efforts sont couronnés de succès. C'est pourquoi j'ai demandé à la personne de config car si il ne se fait pas correctement, il est probablement une erreur de configuration. git status
? vraiment? mongit status
jamais me raconte comment, loin devant ma branche est .. vous êtes de passage quelques arguments supplémentaires pour elle?- j:
git status
ne pas aller sur le dépôt distant pour vérifier si la branche à distance a été mis à jour. Il vous indique la distance à l'avance de votre succursale locale est comparée à votre stockés localement suivi à distance de la branche. Le problème est que normalgit push
(ainsi que l'extraction et de la traction) devrait mettre à jour le suivi à distance de la branche et pour le sens, cela ne semble pas fonctionner. Pour voir pourquoi nous avons besoin de voir à la fois la forme exacte degit push
qui est utilisé et le référentiel local de la configuration, mais que le demandeur a déjà accepté la réponse, je ne peux pas voir ce qui se passe maintenant.
Vous devez vous connecter pour publier un commentaire.
Si vous obtenez ce message après avoir fait un
git pull remote branch
, essayez de la suivre avec ungit fetch
. (Le cas échéant, exécutergit fetch -p
de tailler supprimé les branches de l'repo)Fetch semble mise à jour de la représentation locale de la branche distante, qui ne doit pas nécessairement se produire lorsque vous effectuez un
git pull remote branch
.git push origin master
. Nigit pull
nigit fetch
suivie par la même livraison et la commande push résolu le problème. J'ai eu la force de validation au lieu d'utilisergit push --force origin master
.local representation of the remote branch
?Fetch seems to update the local representation of the remote branch, which doesn't necessarily happen when you do a git pull remote branch.
. Voir stackoverflow.com/questions/292357/...Utilisation
L' --rebase option signifie que git se déplacera à votre validation de côté, synchroniser avec la télécommande et ensuite essayer d'appliquer vos commits de l'état neuf.
$ 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 jamais ne pas bêtement de réécrire l'histoire!Utiliser 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
Profiter.
git reset --hard origin/master
effacé pour moi.Je pense que vous avez mal interpréter le message — votre direction n'est pas d'avance de
master
, il estmaster
. Il est en tête deorigin/master
, qui est un suivi à distance de la branche qui enregistre l'état du dépôt distant à partir de votre dernièrepush
,pull
, oufetch
. C'est vous dire exactement ce que vous avez fait; vous avez de l'avant de la télécommande et c'est pour vous rappeler de vous pousser.Quelqu'un a dit que vous pourriez être la lecture de votre message, vous n'êtes pas. Cette question a effectivement à voir avec votre
<project>/.git/config
fichier. Dans la il y aura une section similaire à ceci:Si vous supprimez l'extraction de la ligne de votre projet .git/config fichier que vous allez arrêter les "Votre branche est en avance de 'origin/master' par
N
s'engage." agacement de se produire.Ou du moins je l'espère. 🙂
ahead by x commits
message. Je n'ai pas vu le message en temps.J'ai eu ce problème sur ma scène serveur où je ne fais que le tire.
Et hard reset m'a aidé à nettoyer la TÊTE à la même distance.
Alors maintenant, j'ai de nouveau:
Dans mon cas, c'était parce que j'ai changé de maître à l'aide
À sortir la nouvelle version de celui-ci au lieu de
La première commande réinitialise la tête de maître à mon dernier s'engage
J'ai utilisé
Pour corriger cela
Je suis passé par chaque solution sur cette page, et heureusement @anatolii-pazhyn commenté parce que sa solution est la seule qui a fonctionné. Malheureusement je n'ai pas assez réputation pour upvote lui, mais je vous recommande d'essayer sa solution:
Qui m'a donné:
Je recommande également:
Vous pouvez également utiliser:
Bonne chance
J'ai eu ce même problème sur une machine Windows. Quand j'ai couru un
git pull origin master
commande, je voudrais obtenir le "devant de 'origin/master' par X s'engage" à l'avertissement. J'ai trouvé que si je la place a courugit pull origin
et ne précise PAS la branche, alors je voudrais ne plus recevoir le message d'avertissement.git fetch
derrière les coulisses.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
Il juste de vous rappeler les différences entre la branche et la branche qui fait de la piste en cours. Veuillez fournir de plus amples informations, y compris la branche est imprimé dans le message et où voulez-vous de pousser/tirer la branche courante.
Si cette question est un peu vieux...j'ai été dans une situation similaire et ma réponse ici m'a aidé à résoudre un problème similaire, j'ai eu
D'abord essayer avec
push -f
ou de force optionSi cela ne fonctionne pas il est possible que (comme dans mon cas) les dépôts distants (ou plutôt les références à des dépôts distants qui s'affichent sur
git remote -v
) pourrait ne pas être mis à jour.Résultat de plus de votre synchronisé votre local ou de la direction avec votre distance/direction générale cependant, le cache dans votre local repo montre encore précédente livraison (local/direction ...à la condition d'un seul commit a été poussé) en tant que CHEF.
Pour confirmer la au-dessus de cloner le repo à un endroit différent et essayer de comparer local/CHEF de la direction générale et à distance/direction de la TÊTE. Si les deux sont les mêmes, alors vous êtes probablement confronté à la question que j'ai fait.
Solution:
Maintenant faire un
push -f
comme suitgit push -f github master
### Note de votre commande n'a pasorigin
plus!Faire un
git pull
maintenantgit pull github master
sur
git status
recevoir# On branch master
nothing to commit (working directory clean)
J'espère que cette utile pour quelqu'un comme le nombre de vues est si élevé que la recherche de cette erreur presque toujours des listes de ce fil sur le haut
Également consulter gitref pour plus de détails
J'ai eu réellement ce qui se passe quand je faisais un commutateur/caisse avec TortiseGIT.
Mon problème était que j'avais créé la direction générale basée sur une autre branche locale. Il a créé un "merge" entrée dans
/.git/config
qui ressemblait à quelque chose comme ceci:Où à chaque fois que je suis passé à la "web" de la branche, il me disait que j'étais 100+ s'engage à l'avance de se développer. Eh bien, je n'étais plus s'engager à développer de sorte que 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 la télécommande ref au lieu de se plaindre d'être derrière la développer direction de.
Comme Vikram dit, ce Débordement de Pile de thread est le premier résultat dans Google lors de la recherche pour ce problème j'ai donc pensé que je devais partager ma situation et de la solution.
Mon expérience dans un environnement d'équipe, avec beaucoup de branches. Nous travaillons dans notre propre branches (en local clones) et il a été l'un de ceux qui
git status
montré que j'avais 11 s'engage à l'avance. Mon hypothèse de travail, comme la question de l'auteur, a été que de +11 était de s'engage de mon propre.Il s'est avéré que j'avais tiré les modifications de la commune
develop
branche dans ma branche de nombreuses semaines plus tôt, mais j'ai oublié! Quand j'ai repensé à mon local de la branche aujourd'hui et faitgit pull origin develop
le nombre a bondi de +41 s'engage à l'avance. Beaucoup de travail a été fait dansdevelop
et donc mon local branche a même été plus loin en avant de la branche sur laorigin
référentiel.Donc, si vous obtenez ce message, pensez à n'importe quel tire/fusionne vous pourriez avoir fait dans d'autres branches (de votre propre, ou autres), vous avez accès. Le message vient de signaux, vous devez
git push
ceuxpull
ed modifications à laorigin
pensions de titres ("suivi de branche") à partir de votre repo local pour obtenir des choses de synchronisation d up.Les réponses qui suggèrent
git pull
ougit fetch
sont corrects.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
).Les derniers enregistrements du fichier de la TÊTE depuis le dernier fetch (pour le référentiel/direction). Faire
git fetch
met à jour les fichiers de la direction générale, le directeur actuel.Bien sûr, si il n'y a rien à chercher (parce que le référentiel local est déjà à jour) puis
.git/FETCH_HEAD
ne change pas..git/FETCH_HEAD
contient9f7336c873ccffc772168bf49807e23ff74014d3 branch 'master' of URL
et.git/refs/remotes/origin/master
contient9f7336c873ccffc772168bf49807e23ff74014d3
, mais je continue à recevoir le message et nigit pull
nigit fetch
elle n'en résoutJe tiens à réitérer le même que celui mentionné par @Marian Zburlia ci-dessus. Il a travaillé pour moi et suggère la même chose pour les autres.
git pull origin develop
devrait être suivie par
$ git pull --rebase
.Cela permettra de supprimer les commentaires à venir sur le
$ git status
après les dernières tirez.git fetch
résoudre cela pour vousSi ma compréhension est correcte, votre local (mise en cache)
origin/master
est pas à jour. Cette commande permet de mettre à jour le référentiel de l'état du serveur.Si vous obtenez ce message après avoir fait un commit pour annuler le suivi du fichier de la direction générale, essayez de faire quelques changements dans un fichier et d'effectuer la validation. Apparemment, vous ne pouvez pas faire de commit unique, qui comprend uniquement les untracking précédemment fichier suivi.
Enfin, ce post m'a aidé à résoudre tout le problème https://help.github.com/articles/removing-files-from-a-repository-s-history/. J'ai juste eu à supprimer le fichier à partir du référentiel de l'histoire.