Il y a trois endroits où un fichier, par exemple, peut être - l'arborescence, l'index et la copie de travail. Lorsque vous ajoutez simplement un fichier à un dossier, vous l'ajoutez à la copie de travail.
Lorsque vous faites quelque chose comme git add file
vous l'ajoutez à l'index. Et lorsque vous le validez, vous l'ajoutez également à l'arbre.
Cela vous aidera probablement à connaître les trois indicateurs les plus courants dans git reset:
git reset [- <mode>
] [ <commit>
]
Ce formulaire réinitialise la tête de branche actuelle <commit>
et met éventuellement à jour l'index (en le réinitialisant dans l'arborescence de <commit>
) et l'arbre de travail en fonction de <mode>
, qui doit être l'un des suivants:
--soft
Ne touche pas du tout le fichier d'index ni l'arborescence de travail (mais réinitialise la tête sur <commit>
, comme tous les modes le font). Cela laisse tous vos fichiers modifiés "Modifications à valider", comme le dirait l'état git.
--mixte
Réinitialise l'index mais pas l'arborescence de travail (c'est-à-dire que les fichiers modifiés sont conservés mais pas marqués pour la validation) et signale ce qui n'a pas été mis à jour. C'est l'action par défaut.
--dur
Réinitialise l'index et l'arborescence de travail. Toutes les modifications apportées aux fichiers suivis dans l'arborescence de travail depuis <commit>
sont ignorées.
Maintenant, quand vous faites quelque chose comme git reset HEAD
- ce que vous faites réellement est git reset HEAD --mixed
et cela "réinitialise" l'index à l'état où il était avant de commencer à ajouter des fichiers / ajouter des modifications à l'index (via git add
) Dans ce cas, la copie de travail et le index (ou staging) étaient synchronisés, mais vous avez fait en sorte que HEAD et l'index soient synchronisés après la réinitialisation.
git rm
d'autre part, supprime un fichier du répertoire de travail et de l'index et lorsque vous validez, le fichier est également supprimé de l'arborescence. git rm --cached
cependant supprime le fichier de l'index seul et le conserve dans votre copie de travail. C'est exactement le contraire de git add file
Dans ce cas, vous avez fait que l'index soit différent de la tête et du travail, en ce que la tête a la version précédemment validée du fichier, la copie de travail a eu la dernière modification, le cas échéant, ou le contenu de HEAD de le fichier et vous avez supprimé le fichier de l'index. Un commit maintenant synchronisera l'index et l'arborescence et le fichier sera supprimé.
git rm --cached
lagit diff
commande ne montre aucun diff, maisgit diff --cached
montre le diff, comme s'il était toujours en cache. Legit status
cependant montre le fichier comme étantUntracked
. Cela semble un peu incohérent.