Comment puis-je supprimer un seul fichier à partir de la zone de transit (annuler la commande git add)?
Situation: j'ai un dépôt Git avec des fichiers déjà dans l'index. - Je apporter des modifications à plusieurs fichiers, ouvrez Git et ajouter ces fichiers à ma zone de transit avec "git add ."
Question: Comment puis-je supprimer l'une de ces fichiers à partir de la zone de transit, mais pas de la supprimer de l'index ou d'annuler les modifications dans le fichier lui-même?
- La zone de transit est l'indice, de sorte que vous pourriez peut-être préciser exactement ce que tu veux dire?
- stackoverflow.com/questions/348170/undo-git-add-before-commit
- Double Possible de Comment annuler la commande git add " avant de s'engager?
Vous devez vous connecter pour publier un commentaire.
Si je comprends correctement à la question, vous voulez simplement de "défaire" la
git add
qui a été fait pour que le fichier.Si vous avez besoin de supprimer un seul fichier de la zone de transit, l'utilisation
git reset HEAD -- <file>
Si vous avez besoin de supprimer un tout le répertoire (dossier) de la zone de transit, l'utilisation
git reset HEAD -- <directoryName>
Vos modifications seront conservées. Lorsque vous exécutez
git status
le fichier une fois de plus montrer comme modifié, mais pas encore mis en scène.Voir le
git reset
de la page de manuel pour plus de détails.--
rend la réponse plus complète, ce qui force à git pour interpréter l'instance de texte comme un nom de fichiergit rm --cached FILE
comme l'a suggéré une autre réponse.git reset HEAD -- <file>
syntaxe ne fonctionne pas! Il serait préférable d'utilisergit reset HEAD <filename>
[sans -- ]git reset HEAD <filePath>
,
git reset
ici, je pense, comme vous pouvez omettre l' --chached option et triste rapidement à l'aide de lagit rm
commande 🙂 Avecgit reset
vous êtes sur le côté sécuritaire, si vous oubliez d'ajouter "une option" on va garder les changer si c'est "plus sûr" pour l'usage quotidien (je parlegit reset --hard
).git rm --cached FILE
étapes de la suppression de fichiers, sans supprimer le fichier de la forme de l'arbre de travail. C'est différent de la question, qui était sur l'annulation degit add
.git rm --cached
va provoquer le fichier est supprimé de l'index, c'est à dire le fichier sans traces fichier. Je ne pense pas que c'est ce que l'OP veut. Veuillez voir une thread ici: stackoverflow.com/questions/45047810/...git reset <file>
Fonctionne si oui ou non vous avez des précédentes livraisons.
Donc, une légère régler pour Tim Henigan réponse: vous devez utiliser -- avant le nom de fichier. Il devrait ressembler à ceci:
--
faire et pourquoi l'ajouter? Je n'aigit reset HEAD <file>
et cela a fonctionné.--
est un diviseur. Dans le cas où le nom de fichier est non conventionnels, par exemple(-f
oumaster
) de git interpréter comme argument de ligne de commande ou nom de la branche à la place du nom de fichier. Voir iciSi vous avez une modification dans filename.txt , vous l'avez ajouté à l'étape par erreur et que vous souhaitez supprimer le fichier de mise en scène, mais vous ne voulez pas perdre les modifications.
Dans le cas où vous voulez juste pour supprimer un sous-ensemble des modifications apportées à votre fichier, vous pouvez utiliser:
ou
Cette commande est essentiellement l'inverse de
git add -p
: il ne supprime que les modifications sélectionnées à partir de la zone de transit. Je trouve qu'il est extrêmement utile dans les "unadding" quelque chose que j'ai ajouté par erreur.Si vous souhaitez supprimer les fichiers suivant un certain modèle et que vous utilisez
git rm --cached
, vous pouvez utiliser le fichier-glob modèles de trop.Voir ici.
Vous voulez:
Affecter à un seul fichier
Supprimer le fichier à partir de la zone de transit
Pas supprimer de fichier unique à partir de l'index
Ne pas annuler le changement lui-même
et la solution est
ou
Lorsque vous ne
git status
, Git vous indique comment unstage:Donc
git reset HEAD <file>
a travaillé pour moi et les modifications non touché.Si vous apportez des modifications à de nombreux dossiers, mais seulement l'envie de mettre en scène quelques-uns d'entre eux, en faisant un
git add .
n'est pas toujours favorable (ou recommandé)- qu'elle met en scène tous les dossiers (dans certains cas, vous souhaitez conserver les modifications que pour vous-même et vous ne voulez pas de mettre en scène pour le dépôt distant).
ni est un endroit idéal pour faire un tas de
git add path/to/file1 path/to/file2
si vous avez beaucoup de répertoires imbriqués (ce qui est le cas dans la plupart des projets) - devient ennuyeux
C'est quand Git GUI est utile (probablement la seule fois que je l'utilise). Il suffit d'ouvrir Git GUI, c'spectacles mis en scène et unstaged les sections du fichier. Sélectionnez les fichiers à partir de la mise en scène de la section que vous souhaitez unstage et appuyez sur
à unstage eux.
Je pense que vous avez probablement confondre avec la notion de indice, comme @CB Bailey a déclaré:
Vous suffit simplement de considérer répertoire de transit et indice comme la même chose.
Donc, tout comme @Tim Henigan réponse, je suppose:
Voici ma réponse:
Généralement, il existe deux façons d'annuler une stade opération, comme d'autres réponses déjà mentionné:
et
Mais quelle est la différence?
Supposons que le fichier a été mise en scène et existe dans répertoire de travail aussi, utiliser
git rm --cached <file>
si vous voulez le supprimer répertoire de transit, et de garder le fichier en répertoire de travail. Mais notez que cette opération ne sera pas seulement supprimer le fichier de répertoire de transit mais aussi marquer le fichier commedeleted
dans répertoire de transit, si vous utilisezaprès cette opération, vous verrez ceci :
C'est un record de supprimer le fichier à partir de répertoire de transit. Si vous ne souhaitez pas conserver cet enregistrement et tout simplement souhaitez annuler une étape précédente de l'exploitation d'un fichier, utilisez
git reset HEAD <file>
à la place.-------- FIN DE RÉPONSE --------
PS: j'ai remarqué quelques réponses mentionnées:
git checkout -- <file>
Cette commande est la situation lorsque le fichier a été mise en scène, mais le fichier a été modifié dans répertoire de travail après qu'il a été mis en scène, utiliser cette opération pour restaurer le fichier dans répertoire de travail de répertoire de transit. En d'autres termes, après cette opération, les changements se produisent dans votre répertoire de travail, PAS votre répertoire de transit.
Vous devez être dans le répertoire du fichier, puis tapez la commande suivante dans le terminal
Hypothèse est que vous avez besoin de réinitialiser un seul fichier.
Pour vider complètement le stage à la fois, exécutez cette commande
git checkout -- <file>
Il fonctionne parfaitement pour supprimer des fichiers à partir de la Zone de transit
Dans mon cas, je ne