web-dev-qa-db-fra.com

Comment puis-je changer de branche dans git?

Laquelle de ces lignes est correcte?

git checkout 'another_branch'

O

git checkout Origin 'another_branch'

O

git checkout Origin/'another_branch'

Et quelle est la différence entre ces lignes?


131
Benyamin Jafari

Si another_branch existe déjà localement et que vous ne vous trouvez pas sur cette branche, alors git checkout another_branch passe à la branche.

Si another_branch n'existe pas mais Origin/another_branch, 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 à partir de Origin/another_branch et définir Origin/another_branch en amont de another_branch.

Si aucun 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, il extrait le fichier de cette révision, mais ce n'est probablement pas ce à quoi vous vous attendiez. Origin est principalement utilisé dans git fetch, git pull et git Push en tant que distant, alias de l'URL du référentiel distant.

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

UPDATE:

Avec la version 2.23.0, nous pouvons également 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 que Origin/foo existe, essayez de créer foo à partir de Origin/foo, puis passez à 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 connue ou d'un commit, puis passez à foo:

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

Si nous gérons un référentiel dans Gitlab et Github en même temps, le référentiel local peut avoir deux télécommandes, par exemple, Origin pour Gitlab et github pour Github. Dans ce cas, le référentiel a Origin/foo et github/foo. git switch foo se plaindra fatal: invalid reference: foo, car il ne sait pas à partir de quelle référence, Origin/foo ou github/foo, créer foo. Nous devons le spécifier avec git switch -c foo Origin/foo ou git switch -c foo github/foo en fonction des besoins. 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/de créer de force foo à partir de (ou réinitialisez foo en) une référence connue ou une validation, puis passez à foo:

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

qui équivalent à:

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 souhaitez simplement créer une branche sans y basculer, utilisez plutôt git branch. 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>
130
ElpieKay

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

git-checkout - Change de branche ou restaure 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 de ne pas avoir de fichiers modifiés. Dans ce cas, vous pouvez valider les modifications ou les stocker.

49
danglingpointer

[git checkout "branch_name"]

est une autre façon de dire:

[git checkout -b branch_name Origin/branch_name]

dans le cas où "nom_branche" existe niquement à distance.

[git checkout -b branch_name Origin/branch_name] est utile si 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']

10
Mehdi

Vérifier: git branch -a

Si vous n'obtenez qu'une seule branche. Ensuite, faites ci-dessous les étapes.

  • É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
pavan

Si vous voulez que la branche suive la branche distante, ce qui est très important si vous voulez valider les modifications apportées à la branche et extraire les modifications, etc., vous devez utiliser add a -t pour le paiement réel, par exemple: git checkout -t branchname

2
Matthew Joughin

Avec Git 2.2 , vous pouvez utiliser git switch <branch name> pour changer de branche.

1
gkw