Que sont checkout
s 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?
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
.
-b
, une nouvelle branche sera créée sur la base de la validation actuelle, puis rendue active.--track
la branche extraite peut être mise au courant d'une branche distante--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
.
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".
"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.