375 votes

Comment passer à une autre branche dans git ?

Laquelle de ces lignes est correcte ?

git checkout 'another_branch'

Ou

git checkout origin 'another_branch'

Ou

git checkout origin/'another_branch'

Et quelle est la différence entre eux ?


76 votes

git checkout [branch] pour la plupart des utilisateurs venant à cette question

378voto

ElpieKay Points 7502

Si another_branch existe déjà localement et que vous n'êtes pas sur cette branche, alors git checkout another_branch passe à la branche.

Si another_branch n'existe pas mais origin/another_branch le fait, alors git checkout another_branch est équivalent à git checkout -b another_branch origin/another_branch; git branch -u origin/another_branch . C'est pour créer another_branch de origin/another_branch et mettre origin/another_branch comme l'amont de another_branch .

Si aucun des deux n'existe, git checkout another_branch renvoie une erreur.

git checkout origin another_branch renvoie une erreur dans la plupart des cas. Si origin est une révision et another_branch est un fichier, alors il vérifie le fichier de cette révision mais très probablement ce n'est pas ce que vous attendez. origin est surtout utilisé dans git fetch , git pull et git push comme distant, un alias de l'url du référentiel distant.

git checkout origin/another_branch réussit si origin/another_branch existe. Il conduit à être dans l'état HEAD détaché, pas sur une branche. Si vous faites de nouveaux commits, les nouveaux commits ne sont pas accessibles depuis les branches existantes et aucune des branches ne sera mise à jour.

UPDATE :

Comme la version 2.23.0 a été publiée, nous pouvons aussi utiliser git switch pour créer et changer de branche.

Si foo existe, essayez de passer à foo :

git switch foo

Si foo n'existe pas et origin/foo existe, essayez de créer foo de origin/foo et ensuite passer à foo :

git switch -c foo origin/foo
# or simply
git switch foo

Plus généralement, si foo n'existe pas, essayez de créer foo à partir d'une référence ou d'un commit connu et ensuite passer à foo :

git switch -c foo <ref>
git switch -c foo <commit>

Si nous maintenons un référentiel dans Gitlab et Github en même temps, le référentiel local peut avoir deux remotes, par exemple, origin pour Gitlab et github pour Github. Dans ce cas, le dépôt a origin/foo et github/foo . git switch foo se plaindra fatal: invalid reference: foo car on ne sait pas de quelle référence il s'agit, origin/foo ou github/foo pour créer foo . Nous devons le spécifier avec git switch -c foo origin/foo ou git switch -c foo github/foo selon le besoin. Si nous voulons créer des branches à partir des deux branches distantes, il est préférable d'utiliser des noms distinctifs pour les nouvelles branches :

git switch -c gitlab_foo origin/foo
git switch -c github_foo github/foo

Si foo existe, essayez de recréer/forcer la création foo de (ou réinitialiser foo à) une référence ou un commit connu et ensuite passer à foo :

git switch -C foo <ref>
git switch -C foo <commit>

qui sont équivalents à :

git switch foo
git reset [<ref>|<commit>] --hard

Essayez de passer à un HEAD détaché d'une référence ou d'un commit connu :

git switch -d <ref>
git switch -d <commit>

Si vous voulez juste créer une branche mais pas y passer, utilisez git branch à la place. Essayez de créer une branche à partir d'une référence ou d'un commit connu :

git branch foo <ref>
git branch foo <commit>

31 votes

Cette réponse est correcte (comme d'habitude, et elle a été approuvée), mais j'ajouterai un commentaire indiquant que mai être utile : le git checkout Le commandement fait trop de choses, à mon avis. C'est pourquoi il y a tant de modes de fonctionnement ici. Si la seule chose git checkout était commutateur branches, la réponse serait simple, mais elle peut aussi créer branches, et même extraire des fichiers de commits spécifiques. sans le changement de branche.

13 votes

C'est la bonne réponse, mais cela montre comment git est un peu foiré en ligne de commande. git checkout pour changer de branche ?

3 votes

@thang Eh bien, avec la version 2.23.0, ce problème est résolu : vous pouvez maintenant utiliser git switch pour passer à une branche.

88voto

danglingpointer Points 2703

Passer à une autre branche dans git. Réponse simple,

git-checkout - Changer de branche ou restaurer les fichiers de l'arbre de travail

git fetch origin         <----this will fetch the branch
git checkout branch_name <--- Switching the branch

Avant de changer de branche, assurez-vous que vous n'avez pas de fichiers modifiés, dans ce cas, vous pouvez livrer les changements ou vous pouvez les cacher.

0 votes

La dernière commande me met dans l'état détaché HEAD. Ce qui signifie qu'on ne peut pas éditer la branche.

2 votes

La branche que vous essayez d'extraire n'est pas extraite, alors vous devez l'extraire avant d'extraire. Vous pouvez sauter la récupération si la branche est à jour et utiliser git checkout branchname.

0 votes

Ne serait-il pas suffisant d'effectuer un "git pull" après avoir basculé dans la branche ?

21voto

Mehdi Points 136

[ git checkout "branch_name" ]

est une autre façon de dire :

[ git checkout -b branch_name origin/branch_name ]

au cas où "nom_branche" existe uniquement à distance.

[ git checkout -b branch_name origin/branch_name est utile dans le cas où vous avez plusieurs télécommandes.

En ce qui concerne [ git checkout origin 'another_branch' ] Je ne suis pas sûr que cela soit possible, AFAK vous pouvez le faire en utilisant la commande "fetch". -- [ git fetch origin 'another_branch' ]

0 votes

Je connais la commande "git checkout -b branchName" pour créer une autre branche. Ce n'était pas la question !

6voto

pavan Points 21

Vérifiez : git branch -a

Si vous ne recevez qu'une seule branche. Alors faites les étapes suivantes.

  • Étape 1 : git config --list
  • Étape 2 : git config --unset remote.origin.fetch
  • Étape 3 : git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/*

2 votes

Je me demande comment cette série de commandes permettrait de passer à une autre branche.

0 votes

Cela pourrait être utile lorsque vous avez fait un clone peu profond (en utilisant le depth ) précédemment et vous vous demandez maintenant pourquoi vous ne pouvez pas récupérer d'autres branches distantes en obtenant le paramètre error: pathspec 'another_branch' did not match any file(s) known to git en utilisant les commandes suggérées ci-dessus. Ce n'est sûrement pas le sujet de la question initiale mais cela peut aider d'autres personnes qui se grattent la tête ici.

5voto

Matthew Joughin Points 66

Si vous voulez que la branche suive la branche distante, ce qui est très important si vous voulez commettre des changements dans la branche et retirer des changements, etc. -t pour la caisse réelle comme ceci : git checkout -t branchname

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X