91 votes

"git checkout --" . vs git checkout

J'ai toujours utilisé git checkout -- . pour vider mon répertoire de travail. Je crois avoir lu quelque part que le -- était nécessaire pour éviter que git ne pense que vous passez des paramètres (ou quelque chose comme ça).

Maintenant, un collègue m'a dit que je pouvais laisser tomber le -- et, en effet, un test rapide a donné exactement le même résultat.

Y a-t-il une différence entre ces deux commandes ?

PS : Je pose la question ici parce que git checkout -- . vs git checkout . est un peu difficile à googler...

0 votes

Où avez-vous lu cela ? Avez-vous lu le documentation officielle ?

138voto

Tim Biegeleisen Points 53335

Je crois me souvenir que le -- est un moyen d'indiquer à Git de traiter ce qui suit checkout comme un fichier et non comme une branche. Supposons que vous ayez à la fois un fichier et une branche appelés stuff . La commande suivante semble alors ambiguë :

git checkout stuff

parce qu'il n'est pas clair si vous demandez le checkout d'un fichier ou d'une branche. En utilisant -- vous demandez explicitement à Git d'extraire un fichier de ce nom/chemin. Ainsi, dans ce cas, les commandes suivantes permettent d'extraire une branche et un fichier appelé stuff :

git checkout stuff       # checkout the branch stuff
git checkout -- stuff    # checkout the file stuff

Notez que git checkout <name> est vraiment destiné aux branches, mais la syntaxe de Git est plus souple, et si Git ne peut pas trouver une branche, il cherchera un fichier.

Étroitement lié : Git change de branche quand un fichier de même nom est présent

0 votes

Je voulais vraiment git co . alias git reset HEAD --hard . Mais je suppose que j'ai tapé ces deux tirets de manière superflue pendant les deux dernières années :)

1 votes

@Laoujin git co . n'est pas du tout alias git reset --hard . Ces deux commandes font des choses différentes.

37voto

Powerlord Points 43989

-- comme argument autonome (c'est-à-dire ne faisant pas partie d'un autre argument) est utilisé par de nombreux programmes de ligne de commande UNIX pour indiquer que tout ce qui le suit n'est pas un argument.

Pourquoi ? Eh bien, dans ce cas, il est utilisé dans le cas où vous avez un chemin dont le nom commence par -- ce qui ne doit pas être interprété comme un argument en soi.

c'est-à-dire git checkout -- --mydirectory qui, sans le -- entraînerait une erreur.

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