web-dev-qa-db-fra.com

git: branche de commutateur sans détacher la tête

J'ai un dépôt 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'essaye de cloner mon référentiel (git clone repository ) puis je passe à la branche expérimentale (git checkout branchname ) mais chaque fois que je fais cela, ma tête se détache et je ne peux pas pousser mes modifications. Qu'est-ce que je fais mal? J'ai l'impression que je manque un concept fondamental de git quelque part, mais lire des pages de manuel git aléatoires 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 documents qui m'aidera à refixer ma tête.

MODIFIER

Le concept d'une branche de suivi est ce qui me manquait. Maintenant que je comprends ce concept, tout est clair. Personnellement, je trouve le git branch --track la syntaxe est beaucoup plus intuitive que git checkout -b branch-name Origin/branch-name.

Merci pour l'aide!

94
Dana Robinson
# 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 pour localname & branchname
Lorsque vous avez vérifié Origin/branchname vous n'étiez pas vraiment en train de vérifier une succursale. Origin/branchname est un nom "distant", et vous pouvez en obtenir une liste avec

branch -a 

Si les couleurs sont activées, les branches locales seront d'une couleur et distantes d'une autre.

Vous devez d'abord créer une branche distante suivie localement afin de pouvoir basculer et travailler dessus.

106
Kent Fredric
git clone [email protected]:abc/def.git
cd def

Créez maintenant une branche de suivi:

git branch --track experimental Origin/experimental
git checkout experimental

Ensuite, après avoir travaillé là-bas, il suffit de pousser vers github par

git Push
16
Christoph Rüegg

Pour développer la réponse de Kent, après avoir fait votre clone, la seule branche que vous aurez (les télécommandes ne comptent pas) est celle qui était active dans le référentiel à partir duquel vous avez cloné - maître dans votre cas.

Donc, vous voudrez d'abord créer une nouvelle branche pour suivre la branche expérimentale distante:

$ git branch experimental Origin/experimental

puis vérifiez-le:

$ git checkout experimental

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

$ git checkout -b experimental Origin/experimental
11
Pat Notz

Avec Git 2.23 (août 2019), vous utiliseriez le git switch commande

Si vous avez une branche distante du même nom, elle sera automatiquement suivie:

$ git switch new-topic
Branch 'new-topic' set up to track remote branch 'new-topic' from 'Origin'
Switched to a new branch 'new-topic'
0
VonC