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 aussi unfuddle.com pour stocker mon code. J'apporte des modifications à mon ordinateur portable Mac dans le train pour aller au travail, puis je les pousse à résoudre le problème 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 des informations non résolues à l'aide de 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 suis confus quant à pourquoi. Je pensais que mon ordinateur portable était l'Origine ... mais je ne sais pas si c'est le fait que j'ai tiré de Subversion ou de Push to Unfuddle qui est à l'origine du message. Comment puis-je:
Mon mac exécute Git version 1.6.0.1.
Lorsque je lance git remote show Origin
comme suggéré par dbr, je reçois 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 lance git remote -v
comme suggéré par Aristote Pagaltzis, je reçois le texte suivant:
~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v
Origin /Users/brian/Projects/GeekFor/gf/.git
unfuddle [email protected]:spilth/geekfor.git
De manière intéressante, je travaille sur mon projet dans le répertoire geekfor
, mais il indique que mon origine est ma machine locale dans le répertoire gf
. Je crois que gf
était le répertoire temporaire que j’avais utilisé lors de la conversion de mon projet de Subversion vers Git et probablement où j’ai poussé pour éviter de perdre mon chemin. Ensuite, je pense avoir extrait une nouvelle copie du fichier déroulant dans le répertoire geekfor
.
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
_
1.
_ Découvrez où Git pense que "l'origine/le maître" utilisegit-remote
_git remote show Origin
_
..qui retournera quelque chose comme ..
_* remote Origin
URL: [email protected]:~/something.git
Remote branch merged with 'git pull' while on branch master
master
Tracked remote branch
master
_
Une télécommande est essentiellement un lien vers un référentiel distant. Quand vous faites ..
_git remote add unfuddle [email protected]/myrepo.git
git Push unfuddle
_
..git transmettra les modifications à l'adresse que vous avez ajoutée. C'est comme un signet, pour les dépôts distants.
Lorsque vous exécutez _git status
_, il vérifie si la validation est absente (comparée à votre référentiel local) et, le cas échéant, par combien de validations. Si vous transmettez toutes vos modifications à "Origine", les deux seront synchronisés, vous ne recevrez donc pas ce message.
_
2.
_ Si c'est quelque part, comment puis-je transformer mon ordinateur portable en 'Origine/Maître'?
Cela ne sert à rien de faire cela. Dites "Origine" est renommé "ordinateur portable" - vous ne voulez jamais faire _git Push laptop
_ à partir de votre ordinateur portable.
Si vous souhaitez supprimer la télécommande Origin, vous devez le faire ..
_git remote rm Origin
_
Cela ne supprimera rien (en termes de fichier-contenu/versions-historique). Cela arrêtera le message "votre branche est en avance de ..", car il ne comparera plus votre référentiel avec la télécommande (car il est parti!)
Une chose à garder à l'esprit est qu'il n'y a rien de spécial à propos de Origin
, il s'agit simplement d'un nom par défaut utilisé par git.
Git utilise Origin
par défaut lorsque vous utilisez des actions telles que _git Push
_ ou _git pull
_. Donc, si vous avez une télécommande que vous utilisez beaucoup (Unfuddle, dans votre cas), je vous recommanderais d’ajouter unfuddle en tant que "Origine":
_git remote rm Origin
git remote add Origin [email protected]:subdomain/abbreviation.git
_
ou faites ce qui précède dans une commande en utilisant set-url:
_git remote set-url Origin [email protected]:subdomain/abbreviation.git
_
Ensuite, vous pouvez simplement faire _git Push
_ ou _git pull
_ pour mettre à jour, au lieu de _git Push unfuddle master
_
Je suis arrivé à cette question en cherchant une explication sur le message "Votre branche est en avance de ...", dans le schéma général de git. Il n'y avait pas de réponse à cela ici, mais puisque cette question est actuellement au sommet de Google lorsque vous recherchez l'expression "Votre succursale est en avance sur" Origine/maître "", j'ai depuis compris ce que le message signifiait réellement. , Je pensais que je posterais les infos ici.
Donc, étant un novice git, je peux voir que la réponse dont j'avais besoin était une réponse distinctement novice. Plus précisément, l'expression "votre branche est en avance de ..." signifie qu'il existe des fichiers que vous avez ajoutés et que vous avez enregistrés dans votre référentiel local, mais que vous n'avez jamais transmis à l'origine. L’intention de ce message est encore plus obscurcie par le fait que "git diff", du moins pour moi, ne présentait aucune différence. Ce n'est que lorsque j'ai exécuté "git diff Origin/master" qu'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:
"votre branche est en avance de ..." => Vous devez appuyer sur 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.
(En outre, je reconnais que certaines subtilités de configuration peuvent invalider partiellement cette solution, telles que le fait que le maître ne soit peut-être pas "distant", et que "Origin" soit un nom reconfigurable utilisé par convention, etc. ne nous soucions pas de ce genre de chose. Nous voulons des réponses simples et directes. Nous pourrons en savoir plus sur les subtilités plus tard, une fois que nous aurons résolu le problème pressant.)
Comte
J'ai eu un problème semblable à celui-ci où mon répertoire de travail était ahead of Origin by X commits
mais le git pull
résultait en Everything up-to-date
. J'ai réussi à résoudre ce problème en suivant ce conseil . Je poste ceci ici au cas où cela aiderait quelqu'un d'autre avec un problème similaire.
Le correctif de base est le suivant:
$ git Push {remote} {localbranch}:{remotebranch}
Les mots entre parenthèses doivent être remplacés par votre nom distant, le nom de votre branche locale et le nom de votre branche distante. par exemple.
$ git Push Origin master:master
parfois, il existe une différence entre la version en cache locale du maître Origin (Origin/master) et le véritable maître Origin.
Si vous exécutez git remote update
, le maître d'origine sera resynchronisé avec Origin/master.
voir la réponse acceptée à cette question
Différences entre git pull Origin master et git pull Origin/master
Je pensais que mon ordinateur portable était l'Origine…
C’est un peu absurde: Origin
fait référence au référentiel distant par défaut - celui sur lequel vous récupérez/extrayez les modifications des autres utilisateurs.
Comment puis-je:
git remote -v
vous montrera ce que Origin
est; Origin/master
est votre "signet" pour le dernier état connu de la branche master
du référentiel Origin
et votre propre master
est un branche de suivi = pour Origin/master
. C'est tout comme il se doit .
Vous pas. Au moins, cela n’a aucun sens de désigner un référentiel comme référentiel distant par défaut.
Ce n’est pas le cas. Cela vous indique simplement que vous avez fait tant de commits localement qui ne se trouvent pas dans le référentiel distant (selon le dernier état connu de ce référentiel).
[Solution]
$ git Push Origin
^ ceci l'a résolu pour moi. Ce qu'il a fait, il a synchronisé mon maître (sur ordinateur portable) avec "Origin" qui se trouve sur le serveur distant.
Je me bats avec ce problème et aucune des réponses précédentes n’aborde la question telle que je la vois. J'ai réduit le problème à l'essentiel pour voir si je pouvais clarifier mon problème.
Je crée un nouveau référentiel (rep1), y mets un fichier et le valide.
mkdir rep1
cd rep1
git init
echo "Line1" > README
git add README
git commit -m "Commit 1"
Je crée un clone de rep1 et l'appelle rep2. Je regarde à l'intérieur rep2 et vois que le fichier est correct.
cd ~
git clone ~/rep1 rep2
cat ~/rep2/README
Dans rep1, je modifie le fichier et le valide. Ensuite, dans rep1, je crée une télécommande pour pointer vers rep2 et pousser les modifications.
cd ~/rep1
<change file and commit>
git remote add rep2 ~/rep2
git Push rep2 master
Maintenant, quand je vais dans rep2 et que je fais un "statut de git", on me dit que je suis en avance sur Origin.
# On branch master
# Your branch is ahead of 'Origin/master' by 1 commit.
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README
#
Le fichier README dans rep2 est tel qu'il était à l'origine, avant la deuxième validation. Les seules modifications que j'ai faites sont de rep1 et tout ce que je voulais faire était de les pousser vers rep2. Qu'est-ce que je ne comprends pas?
Il vous attend pour "Push". Essayer:
$ git Push
Je suis un débutant git aussi. J'ai eu le même problème avec les messages "votre branche est en avance sur Origin/master par N commits". Faire "git diff Origin/master" suggéré a montré quelques diffs que je ne voulais pas garder. Alors ...
Étant donné que mon clone git était destiné à l'hébergement et que je voulais une copie exacte du rapport principal, sans me soucier de conserver les modifications locales, j'ai décidé de sauvegarder mon compte complet et d'en créer un nouveau:
(sur la machine d'hébergement)
mv myrepo myrepo
git clone USER@MASTER_Host:/REPO_DIR myrepo
Pour des raisons de commodité, j'avais l'habitude d'apporter des modifications au clone sur ma machine d'hébergement. Pas plus. Je vais faire ces changements au maître, git commettre là, et faire un pull git. Espérons que cela devrait garder mon clone git sur la machine d’hébergement en parfaite synchronisation.
/ Nara
J'ai eu ce problème récemment et je me suis dit 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 il voit que le serveur l’a toujours. (serveur = origine)
Alors j'ai couru
git rm $(git ls-files --deleted)
Et puis couru un commit et Push.
Cela a résolu le problème.
Il est possible de réinitialiser un commit spécifique avant que vos propres commits aient lieu.
$ git status
# On branch master
# Your branch is ahead of 'Origin/master' by 2 commits.
#
nothing to commit (working directory clean)
Utilisez git log
pour rechercher la validation que vous aviez avant les modifications locales.
$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...
commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...
Prenez note des commits locaux et réinitialisez directement à la validation précédente:
git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
Je me demandais la même chose à propos de mon repo. Dans mon cas, j’avais une vieille télécommande sur laquelle je n’appuyais plus, j’avais donc besoin de la retirer.
Obtenir la liste des télécommandes:
git remote
Supprimer celui dont vous n'avez pas besoin
git remote rm {insert remote to remove}