web-dev-qa-db-fra.com

Qu'est-ce que gits checkout signifie vraiment?

Que sont checkouts dans git?

Je sais qu'une fois que vous avez checkout dans une branche particulière, le HEAD pointe vers cette branche. Mais qu'est-ce que cela signifie vraiment? Est-ce que cela signifie que je peux ensuite travailler sur cette branche? Si oui, alors, sans vérifier une branche, je ne suis pas capable de travailler dessus?

Aussi, qu'est-ce que remote checkout signifier? Comment est-ce utile?

83
daehaai

Comme vous l'avez noté, HEAD est une étiquette indiquant votre position dans l'arbre de validation. Il bouge avec vous lorsque vous passez d'un engagement à un autre. git checkout <commit> Est le mécanisme de base pour vous déplacer dans l'arbre de validation, en déplaçant votre focus (HEAD) vers le commit spécifié.

La validation peut être spécifiée de différentes manières: hachage de validation, nom de branche, nom de balise, syntaxe relative (HEAD^, HEAD~1, Etc.), etc. Il est souvent utile de considérer qu'une commande change de branche. Certaines options fonctionnent dans cette perspective, mais elles font toutes référence à des commits.

Extraire un commit a des effets secondaires autres que le déplacement de HEAD.

  • Le répertoire de travail est mis à jour à l'état de la validation extraite.
  • si un nom de branche est spécifié, la validation rend cette branche active. La branche active se déplacera avec tous les nouveaux commits ajoutés.
    • avec l'option -b, une nouvelle branche sera créée sur la base de la validation actuelle, puis rendue active.
    • avec l'option --track la branche extraite peut être mise au courant d'une branche distante
    • avec l'option --Orphan, une nouvelle branche est créée (comme avec -b), mais ne sera basée sur aucun commit existant.

Il y a quelques options supplémentaires, que vous pouvez lire dans la page de manuel de git checkout , qui tournent toutes autour du déplacement d'un commit à un autre, en modifiant simplement l'effet de ce déplacement. pour déplacer HEAD.

48
David Culp

Permettez-moi de vous expliquer quelques cas d’utilisation de la vérification avec fichier, dossier et branches afin de faciliter la compréhension.

Disons que nous avons un dossier nommé dev et index.html aussi tout est suivi et le répertoire de travail est propre.

Si je change accidentellement le nom du fichier index.html et je veux annuler que je vais simplement utiliser git checkout index.html _ il récupérera cet état de fichier à partir de la branche actuellement sélectionnée du référentiel.

Maintenant, si j’ai fait quelques changements dans le dossier dev et que je veux le récupérer. Je peux utiliser git checkout dev _ mais que se passe-t-il s'il existe déjà une branche nommée dev au lieu de vérifier ce dossier, elle sera alors dérivée de cette branche. Pour éviter cela, je préférerais faire git checkout -- dev.

Maintenant, ici, double tiret nu représente la branche actuelle et demande à git le dossier dev de la branche actuellement sélectionnée.

De même, si je fais git checkout alpha dev il va dérouler le dossier dev de la branche alpha.

Cette réponse est pour votre première question "git checkout signifie vraiment".

21
owaishanif786

"Extraire" signifie que vous prenez une validation donnée du référentiel et recréez l'état du fichier associé et de l'arborescence de répertoires dans le répertoire de travail.

Lorsque vous extrayez une validation qui est pas une tête de branche (par exemple, git checkout HEAD~2), vous êtes sur une tête détachée . Vous pouvez créer des commits ici, mais une fois que vous avez basculé vers une autre branche, ils ne seront plus récupérables sous un nom de branche et pourraient même être supprimés par le ramasse-miettes après un certain temps.

18
Michael Wild