web-dev-qa-db-fra.com

Comment trouver l'emplacement de Origin / master dans git et comment puis-je le changer?

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:

  1. Découvrez où pense Git 'Origine/Maître'?
  2. Si c'est quelque part, comment puis-je transformer mon ordinateur portable en "origine/maître"?
  3. Obtenez ce message pour partir. 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, 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
225
Brian Kelly

_1._ Découvrez où Git pense que "l'origine/le maître" utilise git-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_

192
dbr

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

285
Earl Jenkins

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
38
Mims H. Wright

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

24
chim

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:

  1. 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 .

  2. Vous pas. Au moins, cela n’a aucun sens de désigner un référentiel comme référentiel distant par défaut.

  3. 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).

9

[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.

3
Chris

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?

1
Steve Hindmarch

Il vous attend pour "Push". Essayer:

$ git Push

1
Vino

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

1
Nara Narasimhan

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.

1
looneydoodle

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
0
RobLoach

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}
0
Jason Rikard