Parfois, git suggère git rm --cached
pour déstocker un fichier, parfois git reset HEAD file
. Quand dois-je utiliser lequel ?
EDITAR:
D:\code\gt2>git init
Initialized empty Git repository in D:/code/gt2/.git/
D:\code\gt2>touch a
D:\code\gt2>git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# a
nothing added to commit but untracked files present (use "git add" to track)
D:\code\gt2>git add a
D:\code\gt2>git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: a
#
D:\code\gt2>git commit -m a
[master (root-commit) c271e05] a
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a
D:\code\gt2>touch b
D:\code\gt2>git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# b
nothing added to commit but untracked files present (use "git add" to track)
D:\code\gt2>git add b
D:\code\gt2>git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: b
#
22 votes
Pourquoi ? Je dirais que c'est parce que l'interface en ligne de commande de git a évolué de manière organique et n'a jamais été soumise à une restructuration majeure pour rendre les choses cohérentes. (Si vous n'êtes pas d'accord, notez comment
git rm
peut à la fois scène a suppression et aussi déstabiliser un ajout )5 votes
@romkyns : Je suis d'accord que l'interface de Git a plusieurs bizarreries parce qu'elle a évolué organiquement, mais une suppression est sûrement une fonction inverse d'une addition, donc n'est-il pas logique que
rm
pour défaireadd
? Comment pensez-vousrm
devrait se comporter ?10 votes
La seule réponse réelle à votre question est que juste après un
git init
il n'y a pasHEAD
à réinitialiser.0 votes
Les meilleurs documents pour cela : help.github.com/articles/changing-a-remote-s-url
6 votes
@Zaz, je vais donner mon avis.
rm
implique la suppression dans un contexte unix. Ce n'est pas l'opposé de l'ajout à l'index. Une fonction pour supprimer des fichiers ne devrait pas être surchargée avec des fonctions pour changer l'état de mise à disposition. S'il y a des détails d'implémentation qui rendent ces fonctions pratiques à combiner, cela montre simplement l'absence d'une couche d'abstraction réfléchie dans git, qui rendrait l'utilisation claire.0 votes
La mise à disposition, l'enlèvement ou le nettoyage de l'arbre de travail peuvent être réalisés à l'aide des éléments suivants
git stash
technique. Voyez-la en action : stackoverflow.com/a/20028585/469614 , docs complets : git-scm.com/docs/git-stash . Enfin,git stash drop
fera disparaître toute votre magie comme si de rien n'était :)0 votes
Ils ont été très utiles. Je voulais réinitialiser un fichier que j'avais modifié. Cela nécessitait l'étape supplémentaire de git checkout <fichier>. Je sais que c'est inconscient, mais ...