Que sont les checkout
s dans git?
Je sais qu'une fois que vous faites checkout
à une branche particulière, les HEAD
points à cette branche. Mais qu'est-ce que cela signifie vraiment? Cela signifie-t-il que je peux ensuite travailler sur cette branche? Si oui, alors, sans avoir vérifié une succursale, je ne peux pas y travailler?
Aussi, qu'est-ce que cela remote checkout
signifie? En quoi est-ce utile?
git
git-checkout
daehaai
la source
la source
Réponses:
Comme vous l'avez noté,
HEAD
est une étiquette indiquant où vous vous trouvez dans l'arborescence de validation. Il bouge avec vous lorsque vous passez d'un commit à un autre.git checkout <commit>
est le mécanisme de base pour se déplacer dans l'arborescence de commit, en déplaçant votre focus (HEAD
) vers le commit spécifié.La livraison peut être spécifiée par l' une de plusieurs façons, commettre hachage, nom de la branche, le nom de la balise, la syntaxe relative (
HEAD^
,HEAD~1
, etc.) et ainsi de suite. Il est souvent utile de considérer une extraction comme un changement de branche, et certaines options fonctionnent dans cette perspective, mais elles font toutes référence à des commits.Le retrait d'un commit a des effets secondaires autres que le déplacement
HEAD
.-b
option, une nouvelle branche sera créée en fonction du commit actuel, puis rendue active.--track
option la branche extraite peut être mise au courant d'une branche distante--orphan
option une nouvelle branche est créée (comme avec-b
) mais ne sera basée sur aucun commit existant.Il y a quelques autres options, que vous pouvez lire dans la page de manuel de git checkout , qui tournent toutes autour du passage d'un commit à un autre - en variant simplement l'effet de ce mouvement en plus du déplacement
HEAD
.la source
git checkout <commit> <path>
ne change pas de branche.git checkout <path>
.Laissez-moi vous expliquer quelques cas d'utilisation de l'extraction avec un fichier, un dossier et des branches afin qu'il puisse être utile pour la compréhension.
Disons que nous avons un dossier nommé
dev
et queindex.html
tout est suivi et que le répertoire de travail est propre.Si je change accidentellement le nom du fichier
index.html
et que je veux annuler cela, je vais simplement l'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 un changement dans le
dev
dossier et que je veux le récupérer. Je peux utiliser,git checkout dev
mais que se passe-t-il s'il y a déjà une branche nomméedev
au lieu de vérifier ce dossier, cela va abaisser cette branche. Pour éviter cela, je préfère le fairegit checkout -- dev
.Maintenant, ici, le 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 le fais
git checkout alpha dev
, le dossier dev sera extrait de la branche alpha.Cette réponse est pour votre première question 'git checkout vraiment signifie'.
la source
"Extraire" signifie que vous prenez n'importe quel commit donné du référentiel et recréez l'état du fichier et de l'arborescence de répertoires associés dans le répertoire de travail.
Lorsque vous extrayez un commit qui n'est pas une tête de branche (par exemple
git checkout HEAD~2
), vous êtes sur une tête dite détachée . Vous pouvez créer des commits ici, mais une fois que vous passez à une autre branche, ces commits ne seront pas récupérables par un nom de branche et pourraient même être supprimés par le ramasse-miettes après un certain temps.la source