git: branche de commutation sans tête détachée

j'ai un repository sur github avec une branche principale (master) et une branche pour certains travaux expérimentaux. J'ai fait quelques commits et poussé vers la branche expérimentale et tout allait bien.

maintenant, sur une autre machine, j'essaie de cloner mon dépôt (clone git dépôt ) et puis passer à la branche expérimentale (checkout git nom de branche ) mais à chaque fois que je le fais, ma tête se détache et je ne peux pas pousser mon changement. Ce que je fais mal? J'ai l'impression de rater un concept fondamental de git quelque part, mais lire des pages de Git man au hasard ne me donne aucun indice.

je suis nouveau à git donc je suis désolé si je suis un idiot mais je ne trouve rien dans les docs qui m'aideront à rattacher ma tête.

MODIFIER

le concept d'une branche de pistage est ce que je manquais. Maintenant que je grok ce concept tout est clair. Personnellement, je trouve la syntaxe git branch --track beaucoup plus intuitive que git checkout -b branch-name origin/branch-name .

Merci pour l'aide!

81
demandé sur Dana Robinson 2009-01-23 02:37:05

3 réponses

# first time: make origin/branchname locally available as localname
git checkout -b localname origin/branchname 

# othertimes 
git checkout localname 

git push origin

pour plus de commodité, vous pouvez utiliser la même chaîne de caractères pour le nom de domaine et le nom de branche

Quand vous avez vérifié origin/branchname , vous n'avez pas vraiment vérifié une succursale. origin/branchname est un nom" distant", et vous pouvez obtenir une liste d'entre eux avec

branch -a 

si vous avez activé les couleurs, les branches locales seront une couleur, et distantes une autre.

Vous devez d'abord faire une branche distante suivis localement afin de être en mesure de passer et de travailler sur elle.

95
répondu Kent Fredric 2014-05-05 16:40:16
git clone git@github.com:abc/def.git
cd def

maintenant créer une branche de suivi:

git branch --track experimental origin/experimental
git checkout experimental

puis, après avoir travaillé là, il suffit de pousser à github par

git push
13
répondu Christoph Rüegg 2009-01-23 01:31:03

pour développer la réponse de Kent, après avoir fait votre clone, la seule branche que vous aurez (remotes don't count) est celle qui était active dans le dépôt que vous avez cloné à partir de -- master dans votre cas.

donc, vous voulez d'abord créer une nouvelle branche pour suivre la branche expérimentale à distance:

$ git branch experimental origin/experimental

et ensuite vérifier:

$ git checkout experimental

cependant, Kent a raison -- ces deux commandes peuvent être combinées

$ git checkout -b experimental origin/experimental
10
répondu Pat Notz 2009-01-23 00:41:05