181 votes

"git rm --cached x" vs "git reset head -- x"?

GitRef.org - Base:

git rm va supprimer des entrées de la de la zone de transit. C'est un peu différent d' git reset HEAD qui "unstages" les fichiers. Par "unstage" je veux dire qu'il revient la zone de transit pour ce qui était là avant que nous avons commencé à modifier les choses. git rm sur l'autre main juste des coups de pied le fichier à partir de la scène entièrement, de sorte qu'il n'est pas inclus dans la prochaine instantané, ce qui a pour effet en le supprimant.

Par défaut, un git rm file va supprimer le fichier à partir de la zone de transit entièrement et aussi de votre disque > (répertoire de travail). Pour conserver le fichier dans le répertoire de travail, vous pouvez utiliser git rm --cached.

Mais quelle est exactement la différence entre git rm --cached asd et git reset head -- asd?

243voto

manojlds Points 96599

Il y a trois endroits où un fichier, disons, peut-être - l'arbre, l'index et la copie de travail. Lorsque vous ajoutez un fichier dans un dossier, vous l'ajoutez à la copie de travail.

Quand vous faites quelque chose comme git add file vous l'ajouter à l'index. Et quand vous vous engagez, vous l'ajouter à l'arbre.

Elle ne sera probablement vous aider à connaître les trois plus courantes drapeaux dans git reset:

git reset [--<mode>] [<commit>]

Cette forme réinitialise l'actuel chef de la direction générale de <commit> et éventuellement des mises à jour de l'index (le réinitialiser à l'arbre de l' <commit>) et l'arbre de travail selon <mode>, qui doit être l'un des suivants:

--soft

Ne touchez pas le fichier d'index ni de l'arbre de travail (mais réinitialise la tête de <commit>, comme tous les modes). Cela laisse tous vos fichiers modifiés "Modifications à engagés", comme git status mettrait.

--mixte

Réinitialise l'index, mais pas de l'arbre de travail (c'est à dire, les fichiers modifiés sont conservés mais pas marqué pour la validation) et des rapports de ce qui n'a pas été mis à jour. C'est l'action par défaut.

--hard

Réinitialise l'index et de l'arbre de travail. Toute modification des dossiers dans l'arbre de travail depuis <commit> sont rejetés.

Maintenant, quand vous faites quelque chose comme git reset HEAD - ce que vous êtes en train de faire est - git reset HEAD --mixed et il sera le "reset" de l'indice de l'état où il était avant de commencer à ajouter des fichiers / ajouter des modifications de l'indice ( via git add ) Dans ce cas, la copie de travail et de l'index ( ou de transit ) ont été synchronisés, mais vous avez fait la TÊTE et l'index pour être synchronisé après la réinitialisation.

git rm sur l'autre main supprime un fichier à partir du répertoire de travail et l'index et que vous vous engagez, le fichier est supprimé de l'arbre. git rm --cached cependant supprime le fichier d'index seul et la maintient dans votre copie de travail. C'est l'exact opposé de l' git add file Dans ce cas, vous faites de l'index pour être différente de la TÊTE et du travail, en ce que la TÊTE a engagé précédemment, la version du fichier, la copie de travail a la las modification si l'une ou de la teneur de TÊTE du fichier et que vous avez supprimé le fichier à partir de l'index. Un commit maintenant que la synchronisation de l'index et l'arbre et le fichier sera supprimé.

98voto

Greg Hewgill Points 356191

Peut-être un exemple pour vous aider:

git rm --cached asd
git commit -m "the file asd is gone from the repository"

rapport

git reset HEAD -- asd
git commit -m "the file asd remains in the repository"

Notez que si vous n'avez pas changé quoi que ce soit d'autre, la seconde s'engager à ne pas faire quoi que ce soit.

54voto

yuriks Points 486

git rm --cached file permettra de supprimer le fichier à partir de la scène. C'est, lorsque vous validez le fichier sera supprimé. git reset HEAD -- file sera tout simplement réinitialiser le fichier dans la zone de transit de l'état où il était à la TÊTE de commettre, c'est à dire permet d'annuler les modifications que vous avez faites depuis la dernière validation. Si ce changement se produit à être à nouveau en ajoutant le fichier, puis ils vont être équivalent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X