Je suis un débutant Git. J'ai récemment déplacé un projet Rails de Subversion vers Git. J'ai suivi le tutoriel ici: http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/
J'utilise également unfuddle.com pour stocker mon code. J'apporte des modifications sur mon ordinateur portable Mac dans le train vers / depuis le travail, puis je les pousse à se désinstaller lorsque j'ai une connexion réseau à l'aide de la commande suivante:
git push unfuddle master
J'utilise Capistrano pour les déploiements et extrait le code du référentiel unfuddle en utilisant la branche master.
Dernièrement, j'ai remarqué le message suivant lorsque j'exécute "git status" sur mon ordinateur portable:
# On branch master
# Your branch is ahead of 'origin/master' by 11 commits.
#
nothing to commit (working directory clean)
Et je ne sais pas pourquoi. Je pensais que mon ordinateur portable était à l'origine ... mais je ne sais pas si c'est le fait que j'ai initialement tiré de Subversion ou poussé vers Unfuddle qui est à l'origine du message. Comment puis-je:
- Découvrez où Git pense que «origine / maître» est?
- Si c'est ailleurs, comment transformer mon ordinateur portable en «origine / maître»?
- Obtenez ce message pour s'en aller. Cela me fait penser que Git est mécontent de quelque chose.
Mon Mac exécute Git version 1.6.0.1.
Lorsque je lance git remote show origin
comme suggéré par dbr, j'obtiens ce qui suit:
~/Projects/GeekFor/geekfor 10:47 AM $ git remote show origin
fatal: '/Users/brian/Projects/GeekFor/gf/.git': unable to chdir or not a git archive
fatal: The remote end hung up unexpectedly
Lorsque je cours git remote -v
comme suggéré par Aristote Pagaltzis, j'obtiens ce qui suit:
~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v
origin /Users/brian/Projects/GeekFor/gf/.git
unfuddle [email protected]:spilth/geekfor.git
Maintenant, fait intéressant, je travaille sur mon projet dans le geekfor
répertoire, mais cela dit que mon origine est ma machine locale dans le gf
répertoire. Je pense que gf
c'était le répertoire temporaire que j'ai utilisé lors de la conversion de mon projet de Subversion en Git et probablement d'où j'ai poussé pour ne pas me familiariser. Ensuite, je crois avoir extrait une nouvelle copie de unfuddle dans le geekfor
répertoire.
Il semble donc que je devrais suivre les conseils de dbr et faire:
git remote rm origin
git remote add origin [email protected]:spilth/geekfor.git
la source
origin
référentiel (même s'il ne sait pas comment cela fonctionne en termes git) - retirer la télécommande ne serait guère utile pour lui.Je suis venu à cette question en cherchant une explication sur ce que signifie le message "votre branche est en avance par ...", dans le schéma général de git. Il n'y avait pas de réponse à cela ici, mais puisque cette question apparaît actuellement en haut de Google lorsque vous recherchez la phrase "Votre branche est en avance sur 'origine / maître'", et j'ai depuis compris ce que le message signifie vraiment , J'ai pensé publier l'information ici.
Donc, étant un débutant git, je peux voir que la réponse dont j'avais besoin était une réponse nettement novice. Plus précisément, ce que signifie l'expression "votre branche est en avance par ...", c'est qu'il y a des fichiers que vous avez ajoutés et enregistrés dans votre référentiel local, mais que vous n'avez jamais poussés vers l'origine. L'intention de ce message est encore obscurcie par le fait que "git diff", du moins pour moi, n'a montré aucune différence. Ce n'est que lorsque j'ai lancé "git diff origin / master" que l'on m'a dit qu'il y avait des différences entre mon référentiel local et le maître distant.
Donc, pour être clair:
"your branch is ahead by ..." => Vous devez pousser vers le maître distant. Exécutez "git diff origin / master" pour voir quelles sont les différences entre votre référentiel local et le référentiel maître distant.
J'espère que cela aide d'autres débutants.
(De plus, je reconnais qu'il existe des subtilités de configuration qui peuvent invalider partiellement cette solution, comme le fait que le maître peut ne pas être réellement "distant", et que "origine" est un nom reconfigurable utilisé par convention, etc. Mais les débutants le font ne nous soucions pas de ce genre de choses. Nous voulons des réponses simples et directes. Nous pourrons lire les subtilités plus tard, une fois que nous aurons résolu le problème urgent.)
comte
la source
git diff --cached origin/master
une meilleure instruction ici car elle indique quel serait le résultat de la prochaine poussée? La commande en surbrillance que vous avez ci-dessus montre également les fichiers non validés et non mis en scène (je pense que je suis aussi un débutant git)git fetch
si vous obtenez cette erreur après agit pull remote branch
. Vos références sont peut-être obsolètes.git fetch
corrige cela.origin/master
partie signifie-t-elle unemaster
branche dans leorigin
référentiel?# On branch master
# Your branch is ahead of 'origin/master' by 3 commits.
Mais git diff origin / master ne montre rien (et l'option --cached ne change rien à cela). Et, git fetch ne change pas cela, git pull ne change pas cela, git reset --hard ne change pas cela. Pour changer cela, j'avais besoin de: git reset --hard origin / master Et j'ai choisi cette route parce que d'autres personnes travaillent avec moi dans ce référentiel et je ne voulais pas invalider leurs tests, et parce que je ne pouvais pas savoir ce que ces commits sont.git checkout master
reçois le message, ce qui signifie que je devraisgit pull origin master
avant de travailler. mais je trouve cela très déroutant parce que la formulation du message suggère le contraireJ'ai eu un problème similaire à celui-ci, où se trouvait mon répertoire de travail,
ahead of origin by X commits
maisgit pull
qui en résultaitEverything up-to-date
. J'ai réussi à le réparer en suivant ces conseils . Je poste ceci ici au cas où cela aiderait quelqu'un d'autre avec un problème similaire.La correction de base est la suivante:
Où les mots entre parenthèses doivent être remplacés par votre nom distant, votre nom de branche locale et votre nom de branche distante. par exemple
la source
git diff
n'a rien montré, et après avoir fait ce que vous avez décrit, je ne reçois plus ce message déroutant et ennuyeux.il existe parfois une différence entre la version locale en cache du maître d'origine (origine / maître) et le vrai maître d'origine.
Si vous exécutez
git remote update
cela resynchronisera l'origine master avec origin / mastervoir la réponse acceptée à cette question
Différences entre git pull origin master et git pull origin / master
la source
C'est un peu absurde:
origin
fait référence au référentiel distant par défaut - celui dont vous récupérez / tirez habituellement les modifications des autres.git remote -v
vous montrera ce quiorigin
est;origin/master
est votre «signet» pour le dernier état connu de lamaster
branche duorigin
référentiel, et le vôtremaster
est une branche de suivi pourorigin/master
. C'est tout comme ça devrait être .Non. Au moins, cela n'a aucun sens pour un référentiel d'être le référentiel distant par défaut pour lui-même.
Ce n'est pas le cas. Cela vous indique simplement que vous avez effectué tant et tant de validations localement qui ne se trouvent pas dans le référentiel distant (selon le dernier état connu de ce référentiel).
la source
origin
pointer l'ordinateur portable localement, car être hors ligne ou changer de réseau est un cas très courant pour les appareils portables comme les ordinateurs portables. De cette façon, vous pouvez utilisergit push
et àgit pull
tout moment, pas besoin de penser si vous êtes actuellement connecté au bon réseau. Ce localorigin
peut être synchronisé avec les vraies télécommandes automatiquement lorsqu'une liaison réseau est disponible, selon l'état d'itinérance actuel. La partie problématique est de savoir quand exécuter quelle synchronisation, par rapport à la partie GIT qui est assez facile.origin
vers un autre référentiel sur votre ordinateur portable. Cependant, le fait de pointer leorigin
référentiel sur lui-même ne fait rien: cela ne ferait aucune différence que vous exécutiezgit push
ougit pull
, car un référentiel est toujours exactement synchronisé avec lui-même de toute façon. C'est err, un peu tautologique.[ Solution ]
^ ceci l'a résolu pour moi. Ce qu'il a fait, il a synchronisé mon maître (sur un ordinateur portable) avec "origine" qui se trouve sur le serveur distant.
la source
Je me bats avec ce problème et aucune des réponses précédentes ne s'attaque à la question telle que je la vois. J'ai résolu le problème à ses bases pour voir si je peux clarifier mon problème.
Je crée un nouveau référentiel (rep1), y mets un fichier et le valide.
Je crée un clone de rep1 et l'appelle rep2. Je regarde à l'intérieur de rep2 et je vois que le fichier est correct.
Dans rep1, j'apporte une seule modification au fichier et je le valide. Ensuite, dans rep1, je crée une télécommande pour pointer vers rep2 et pousser les modifications.
Maintenant, quand j'entre dans rep2 et que je fais un `` statut git '', on me dit que je suis en avance sur l'origine.
README dans rep2 est tel qu'il était à l'origine, avant le deuxième commit. Les seules modifications que j'ai apportées sont à rep1 et tout ce que je voulais faire était de les repousser à rep2. Qu'est-ce que je ne saisis pas?
la source
Il vous attend pour "pousser". Essayer:
$ git push
la source
J'ai eu ce problème récemment et j'ai pensé que c'était parce que j'avais supprimé certains fichiers dont je n'avais plus besoin. Le problème est que git ne sait pas que les fichiers ont été supprimés et qu'il voit que le serveur les a toujours. (serveur = origine)
Alors j'ai couru
Et puis exécuté un commit et push.
Cela a résolu le problème.
la source
Je suis aussi un débutant git. J'ai eu le même problème avec les messages «votre branche est en avance sur les messages origine / maître par N commits». Faire le "git diff origin / master" suggéré a montré quelques différences que je ne tenais pas à garder. Alors ...
Étant donné que mon clone git était destiné à l'hébergement et que je voulais une copie exacte du référentiel maître et que je ne souhaitais pas conserver les modifications locales, j'ai décidé de sauvegarder l'intégralité de mon référentiel et d'en créer un nouveau:
(sur la machine d'hébergement)
Pour plus de commodité, j'avais l'habitude d'apporter des modifications au clone sur ma machine d'hébergement. Pas plus. Je vais apporter ces modifications au maître, git s'y engager et faire un git pull. Espérons que cela devrait garder mon clone git sur la machine d'hébergement en parfaite synchronisation.
/ Nara
la source
Je me demandais la même chose à propos de mon repo. Dans mon cas, j'avais une vieille télécommande sur laquelle je ne poussais plus, j'ai donc dû la retirer.
Obtenez la liste des télécommandes:
Retirez celui dont vous n'avez pas besoin
la source
Il est possible de réinitialiser un commit spécifique avant que vos propres commits aient lieu.
Utilisez
git log
pour trouver quel commit était le commit que vous aviez avant les modifications locales.Prenez note des validations locales et réinitialisez directement la validation précédente:
la source
J'ai eu le problème "Votre branche est en avance sur 'origine / master' par nn commits." quand j'ai poussé vers un référentiel distant avec:
Quand j'ai trouvé que mon adresse distante était dans le fichier .git / FETCH_HEAD et que j'ai utilisé:
le problème a disparu.
la source