Quelle est la différence entre la TÊTE, le travail de l'arbre et de l'index, dans Git?
Quelqu'un peut me dire la différence entre la TÊTE, le travail de l'arbre et de l'index, dans Git?
De ce que je comprends, ils sont tous les noms pour les différentes branches. Est mon hypothèse est correcte?
Modifier
J'ai trouvé ce
Un seul dépôt git peut suivre un nombre arbitraire de branches, mais votre arbre de travail est associée à l'un d'entre eux (le "courant" ou "check-out" de la branche), et la TÊTE pointe vers cette branche.
Est-ce à dire que la TÊTE et l'arbre de travail sont toujours les mêmes?
- À l'égard de votre edit: absolument pas.
HEAD
est de les commettre, à l'extrémité de la branche courante. Si vous avez coché la branche, c'est à dire pas de fichiers modifiés, alors son contenu correspond à l'arbre de travail. Dès que vous modifiez quelque chose, il ne correspond plus. - Je pense que vous devez lire ceci: think-like-a-git.net
- Je voudrais également ajouter un
Staging Area
à cette liste. Qu'est-ce queHEAD
,Working Tree
,Index
et unStaging Area
- La dernière phrase de @Jefromi serait plus clair comme de l': > dès Que vous modifiez quelque chose, l'arbre de travail ne correspond plus à la TÊTE de commettre
- Pour toute cette lecture dans l'avenir, la meilleure façon de vraiment comprendre certaines de ces réponses est à voir et à sentir et visuellement conceptualiser ce qui se passe: c'est le meilleur outil pour apprendre git jamais: onlywei.github.io/expliquez-git-avec-d3/#fetchrebase
- De la Zone de transit et les Index sont la même chose. (Voir approuvé réponse ci-dessous)
- Aucun des liens n'importe quoi.
- essayez de frapper le bouton d'actualisation et les graphiques de charge.
Vous devez vous connecter pour publier un commentaire.
Quelques autres bonnes références sur ces sujets:
(note: comme commenté par Timo Huovinen, ces flèches ne sont pas ce qui le commet point, c'est la flux de travail afin, fondamentalement, montrant des flèches comme
1 -> 2 -> 3 -> 4
où1
est le premier commit et4
est la dernière)1 -> 2 -> 3 -> 4
où 1 est le premier commit et 4 est la dernièregit rm
l'état qu'il est utilisé pour supprimer les fichiers à partir de l'arbre de travail et de l'index". Dans ce cas, l'index n'est pas ce qui est prête à être engagée, mais c'est plutôt comme un index de tous les fichiers présents dans le référentiel. Qu'en pensez-vous?git diff --cached
entrelocal repository
etindex
.checkout
etcheckout HEAD
ne sont pas de travail pour moi. Je pense qu'ils ont tort. D'autres choses sont très bien. Pour revenir de la "mise en scène" à "unstaged' état,git reset HEAD
est utilisé et pascheckout
git checkout HEAD -- afile
etgit reset afile
serait similaire, non? Les deux se restaurer le fichier à partir du local repo, en supprimant tout ce qui a été mis en scène: stackoverflow.com/a/45018564/6309, stackoverflow.com/a/33849726/6309. Alors qu'une simple caisse (sans la TÊTE) aurait pour effet de supprimer les modifications locales, la restauration de l'index de contenu (le sens de la restauration de ce qui est actuellement mis en scène dans l'index)git checkout
etgit checkout HEAD
faire la même chose, je ne pense pas que la partie est de l'image est correcte. En suivant le lien il note une.
à la fin, pour fairegit checkout .
, comme le bon de commande.La différence entre TÊTE (branche actuelle ou la dernière commis de l'état actuel de la branche), indice (aka. zone de transit) et arbre de travail (l'état de fichiers dans la caisse) est décrite dans "Trois États" de la section "1.3 Bases de Git" chapitre de Pro Git livre de Scott Chacon (sous licence Creative Commons).
Ici est l'image qui l'illustre à partir de ce chapitre:
Dans l'image ci-dessus "répertoire de travail" est le même que "arbre de travail", la "zone de transit" est un autre nom pour git "index", et TÊTE points d'extrait de branche, qui pointe des points pour le dernier commit dans le "répertoire git (référentiel)"
Noter que
git commit -a
aurait des changements de phase et de s'engager dans une étape.working tree
semble être préféré àworking directory
de nos jours. Voir github.com/git/git/commit/...Votre arbre de travail est ce qui est réellement dans les fichiers que vous êtes en train de travailler.
HEAD
est un pointeur vers la branche ou de s'engager à ce que vous avez vérifié, et qui va être le parent d'un nouveau commit, si vous le faites. Par exemple, si vous êtes sur lemaster
branche, puisHEAD
sera point àmaster
, et quand vous vous engagez, que le nouveau commit sera un descendant de la révision quemaster
souligné, etmaster
sera mis à jour pour pointer vers le nouveau commit.La indice est une zone de transit où le nouveau commit est préparé. En substance, le contenu de l'index sont ce qui va aller dans le nouveau commit (bien que si vous ne
git commit -a
, cela ajoutera automatiquement toutes les modifications apportées aux fichiers qui Git sait à propos de l'index avant de s'engager, donc il va s'engager avec le contenu actuel de votre arbre de travail).git add
permettra d'ajouter ou de mettre à jour des fichiers à partir de l'arbre de travail dans votre index.git commit -a
(vous devez les ajouter avecgit add
), de sorte que votre arbre de travail peut avoir d'autres fichiers de votre index, votre local résultant de pensions ou de votre télécommande pensions n'ont pas.HEAD
se réfère à la plus récente s'engager, de sorte que lorsque vous vous engagez, vous êtes à la mise à jourHEAD
à votre nouveau commit, ce qui correspond à l'index. En poussant n'a pas beaucoup à faire avec elle - il fait de branches dans le match à distance des branches dans votre local repo.Arbre de travail
Votre arbre de travail sont les fichiers que vous êtes en train de travailler.
Git index
Le git "index" est l'endroit où vous placez les fichiers que vous souhaitez s'engager sur le dépôt git.
L'indice est également connu comme cache, répertoire de cache, répertoire courant cache, de la zone de transit, mise en scène fichiers.
Avant de "s'engager" (checkin) des fichiers sur le dépôt git, vous devez d'abord placer les fichiers dans le git "index".
L'indice est pas le répertoire de travail: vous pouvez taper une commande telle que
git status
, et git va vous dire quels sont les fichiers dans votre répertoire de travail ont été ajoutées à la git d'index (par exemple, en utilisant lagit add filename
de commande).L'index n'est pas le dépôt git: les fichiers dans le git de l'index sont des fichiers qui git commit sur le dépôt git si vous avez utilisé la commande git commit.
reset --hard HEAD
à assurez-vous que votre index == votre arbre de travail. puis:mkdir history && git checkout-index --prefix history/ -a
Le résultat est une duplication de l'ensemble de votre arbre de travail dans votrehistory/
répertoire. Ergo git index >= git répertoire de travailecho untracked-data > untracked-file
, avant ou après lagit reset --HARD
etgit checkout-index
étapes. Vous trouverez que le sans traces fichier pas dans lehistory
répertoire. Vous pouvez également les modifier à la fois l'indice et le travail-l'arbre de façon indépendante, bien que la modification de l'index sans d'abord toucher le travail de l'arbre est dur (nécessite l'utilisation degit update-index --index-info
).