Quelqu'un peut-il me dire la différence entre HEAD, arbre de travail et index, dans Git?
D'après ce que je comprends, ce sont tous des noms de branches différentes. Mon hypothèse est-elle correcte?
Éditer
j'ai trouvé ça
Un seul référentiel git peut suivre un nombre arbitraire de branches, mais votre arbre de travail n'est associé qu'à une seule d'entre elles (la branche "actuelle" ou "extraite"), et HEAD pointe vers cette branche.
Est-ce à dire que la TÊTE et l'arbre de travail sont toujours les mêmes?
git
version-control
Joyce Babu
la source
la source
HEAD
est le commit à la pointe de la branche courante. Si vous venez de vérifier la branche, c'est-à-dire que vous n'avez pas de fichiers modifiés, son contenu correspond à l'arborescence de travail. Dès que vous modifiez quelque chose, il ne correspond plus.Staging Area
à cette liste. Ce qui estHEAD
,Working Tree
,Index
etStaging Area
Réponses:
Quelques autres bonnes références sur ces sujets:
(note: comme commenté par Timo Huovinen , ces flèches ne sont pas ce que les commits indiquent, il est l' ordre de workflow , montrant essentiellement des flèches comme
1 -> 2 -> 3 -> 4
où1
est la première commettras et4
est le dernier)la source
La différence entre HEAD (branche actuelle ou dernier état validé sur la branche actuelle), l' index (aka. Zone de transit) et l' arborescence de travail (l'état des fichiers en cours de paiement) est décrite dans la section "Les trois états" de la section "1.3 Git Basics " chapitre du livre Pro Git de Scott Chacon (licence Creative Commons).
Voici l'image l'illustrant de ce chapitre:
Dans l'image ci-dessus, "répertoire de travail" est identique à "arbre de travail", la "zone de transit" est un autre nom pour git "index" et HEAD pointe vers la branche actuellement extraite, qui pointe pour la dernière validation dans le " répertoire git (référentiel) "
Notez que cela
git commit -a
mettrait en place des changements et s'engagerait en une seule étape.la source
working tree
semble être préféré àworking directory
nos jours. Voir github.com/git/git/commit/…Votre arborescence de travail est ce qui se trouve réellement dans les fichiers sur lesquels vous travaillez actuellement.
HEAD
est un pointeur sur la branche ou le commit que vous avez extrait en dernier, et qui sera le parent d'un nouveau commit si vous le faites. Par exemple, si vous êtes sur lamaster
branche, alorsHEAD
pointera versmaster
, et lorsque vous validerez, ce nouveau commit sera un descendant de la révision quimaster
pointait vers, etmaster
sera mis à jour pour pointer vers le nouveau commit.L' index est une zone intermédiaire dans laquelle le nouveau commit est préparé. Essentiellement, le contenu de l'index est ce qui ira dans la nouvelle validation (bien que si vous le faites
git commit -a
, cela ajoutera automatiquement toutes les modifications des fichiers que Git connaît à l'index avant de valider, donc il validera le contenu actuel de votre arborescence de travail ).git add
ajoutera ou mettra à jour des fichiers de l'arborescence de travail dans votre index.la source
git commit -a
(vous devez les ajouter avecgit add
), donc votre arborescence de travail peut avoir des fichiers supplémentaires que votre index, votre référentiel local ou votre repo à distance ne dispose pas.HEAD
fait référence à la validation la plus récente, donc lorsque vous validez, vous mettez à jourHEAD
votre nouvelle validation, qui correspond à l'index. Pousser n'a pas grand-chose à voir avec cela - cela fait des branches dans les branches de correspondance distantes dans votre référentiel local.Arbre de travail
Votre arborescence de travail sont les fichiers sur lesquels vous travaillez actuellement.
Index Git
Le git "index" est l'endroit où vous placez les fichiers que vous souhaitez valider dans le référentiel git.
L'indice est également connu sous le nom cache , cache de répertoire , cache du répertoire courant , la zone de mise en scène , les fichiers mis en scène .
Avant de «valider» (archiver) des fichiers dans le référentiel git, vous devez d'abord placer les fichiers dans «l'index» git.
L'index n'est pas le répertoire de travail: vous pouvez taper une commande telle que
git status
, et git vous dira quels fichiers de votre répertoire de travail ont été ajoutés à l'index git (par exemple, en utilisant lagit add filename
commande).L'index n'est pas le référentiel git: les fichiers de l'index git sont des fichiers que git validerait dans le référentiel git si vous utilisiez la commande git commit.
la source
reset --hard HEAD
pour vous assurer que votre index == votre arbre de travail. an then:mkdir history && git checkout-index --prefix history/ -a
Le résultat est une duplication de tout votre arbre de travail dans votrehistory/
répertoire. Ergo git index> = répertoire de travail gitecho untracked-data > untracked-file
, avant ou après les étapesgit reset --HARD
etgit checkout-index
. Vous constaterez que le fichier non suivi ne se trouve pas dans lehistory
répertoire. Vous pouvez également modifier à la fois l'index et l'arbre de travail indépendamment, bien que la modification de l'index sans toucher d'abord l'arbre de travail soit difficile (nécessite l'utilisationgit update-index --index-info
).