Comment trouver le lieu d'origine / maître dans git et comment puis-je le changer?

StackOverflow https://stackoverflow.com/questions/277077

  •  07-07-2019
  •  | 
  •  

Question

Je suis un novice 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 pour me rendre au travail, puis je les pousse à me désencombrer 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 fichiers compliqués à l'aide de la branche principale.

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 comprends pas 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 que j'ai poussé vers Unfudddle qui est à l'origine du message. Comment puis-je:

  1. Découvrez où Git pense que "l'origine / le maître" se trouve?
  2. Si c'est ailleurs, comment puis-je transformer mon ordinateur portable en "origine / maître"?
  3. Faites que ce message disparaisse. Cela me fait penser que Git est mécontent de quelque chose.

Mon Mac exécute Git version 1.6.0.1.

Lorsque j'exécute l'origine de l'émission distante git comme suggéré par dbr, j'obtiens les informations suivantes:

~/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 j'exécute git remote -v comme suggéré par Aristotle Pagaltzis, je reçois le texte suivant:

~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v
origin  /Users/brian/Projects/GeekFor/gf/.git
unfuddle    git@spilth.unfuddle.com:spilth/geekfor.git

Maintenant, curieusement, 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'ai utilisé lors de la conversion de mon projet de Subversion vers Git et probablement l'endroit où j'ai poussé pour éviter de déranger. Ensuite, je pense avoir extrait une nouvelle copie de unfuddle 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 git@spilth.unfuddle.com:spilth/geekfor.git
Était-ce utile?

La solution

  

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: me@remote.example.com:~/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 tu le fais ..

git remote add unfuddle me@unfuddle.com/myrepo.git
git push unfuddle

.. git appliquera 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 s'il manque des validations à distance (par rapport à votre référentiel local) et, dans l'affirmative, 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 ailleurs, comment puis-je transformer mon ordinateur portable en "origine / maître"?

Cela ne sert à rien. Dites " origine " est renommé " ordinateur portable " - vous ne voulez jamais faire ordinateur portable git push à partir de votre ordinateur portable.

Si vous souhaitez supprimer la télécommande d'origine, vous devez le faire ..

git remote rm origin

Ceci ne supprimera rien (en termes de fichier-contenu / versions-historique). Cela arrêtera le " votre agence est en avance de .. " message, car il ne comparera plus votre référentiel avec la télécommande (car il est parti!)

Une chose à retenir est que origine n'a rien de spécial, il s'agit simplement d'un nom par défaut utilisé par git.

Git utilise origine par défaut lorsque vous effectuez des opérations 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 comme "origine":

git remote rm origin
git remote add origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

ou faites ce qui précède en une seule commande en utilisant set-url:

git remote set-url origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

Ensuite, vous pouvez simplement faire git push ou git tirer pour mettre à jour, au lieu de git push unfuddle master

Autres conseils

Je suis arrivé à cette question en cherchant une explication sur le message "votre succursale est en avance de ...". signifie, dans le régime général de git. Il n'y avait pas de réponse à cela ici, mais comme cette question est actuellement affichée en haut de Google lorsque vous recherchez l'expression "Votre succursale est en avance sur" origine / maître "", et depuis, j'ai compris quel était le message. signifie vraiment, je pensais que je posterais l'info 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, quels sont les "& votre; agence est en avance sur ..." expression signifie qu'il y a des fichiers que vous avez ajoutés et engagés dans votre référentiel local, mais que vous n'avez jamais poussés à l'origine. L'intention de ce message est en outre 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". 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 agence est en avance sur ..." = > Vous devez pousser le maître distant. Exécutez "git diff origin / master" pour connaître les différences entre votre référentiel local et le référentiel maître distant.

J'espère que cela aidera 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 pas réellement "distant" et que "origine" soit un nom reconfigurable utilisé par convention, etc. Mais les débutants ne se soucient pas de ce genre de choses. 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.)

Earl

J'ai eu un problème similaire à celui-ci où mon répertoire de travail était en avance sur l'origine par X commits , mais le git pull entraînait à ce jour . J'ai réussi à résoudre ce problème en suivant cet avis . 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 crochets 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 y a une différence entre la version en cache locale du maître d'origine (origine / maître) et le maître d'origine véritable.

Si vous exécutez la mise à jour à distance git , cela resynchronisera le maître d'origine avec l'origine / maître

voir la réponse acceptée à cette question

Différences entre git pull origin master & amp; git pull origine / master

  

Je pensais que mon ordinateur portable était à l'origine & # 8230;

Ce genre de non-sens est: origine fait référence au référentiel distant par défaut & # 8211; celui que vous récupérez / tirez habituellement des modifications des autres personnes.

  

Comment puis-je:

  1. git remote -v vous montrera quel origine est; origine / maître correspond à votre & # 8220; signet & # 8221; pour le dernier état connu de la branche maître du référentiel origine , et votre propre maître est un branche de suivi pour origine / maître . C'est tout comme il se doit .

  2. vous n’êtes pas. Au moins, cela n’a aucun sens d’être un référentiel distant par défaut pour lui-même.

  3. Ce n'est pas & # 8217; t. Cela signifie simplement que vous avez effectué un tel nombre de commits localement qui ne figurent pas dans le référentiel distant (selon le dernier état connu de ce référentiel).

[Solution]

$ git push origin

^ cela l'a résolu pour moi. Ce qu’il a fait, il a synchronisé mon maître (sur un ordinateur portable) avec "origine". c'est 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 insère 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 de 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 appliquer les modifications.

cd ~/rep1
<change file and commit>
git remote add rep2 ~/rep2
git push rep2 master

Maintenant, lorsque je vais dans rep2 et que je fais un "statut de git", on me dit que je suis en avance sur l'origine.

# 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 attend que vous "poussiez". Essayez:

$ git push

J'ai eu ce problème récemment et je me suis dit que c'était parce que j'avais supprimé des 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)

J'ai donc couru

git rm $(git ls-files --deleted)

Et puis couru un commit et push.

Cela a résolu le problème.

Je suis un débutant git aussi. J'ai eu le même problème avec les messages "votre branche est en avance sur l'origine / maître par N commits". Faire «git diff origin / master» suggéré a montré quelques diffs que je ne voulais pas garder. Alors ...

Comme 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 entier et d'en créer un nouveau:

(sur la machine hôte)

mv myrepo myrepo
git clone USER@MASTER_HOST:/REPO_DIR myrepo

Par souci 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. J'espère que cela devrait garder mon clone git sur la machine d'hébergement complètement synchronisé.

/ Nara

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

Supprimez celui dont vous n'avez pas besoin

git remote rm {insert remote to remove}

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 le journal git 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

J'ai eu le problème "Votre branche est en avance sur" origine / maître "de nn commits." quand j'ai poussé vers un référentiel distant avec:

git push ssh://git@xxx.repositryhosting.com/yyy/zzz.git

Quand j'ai découvert que mon adresse distante était dans le fichier .git / FETCH_HEAD et utilisée:

git push

le problème a disparu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top