http://norbauer.com/notebooks/code/notes/git-revert-reset-a-single-file
J'ai trouvé un message.
Mais je ne sais toujours pas quelle est la différence entre
git checkout <filename>
git checkout -- <filename>
Dans quelle situation dois-je utiliser respectivement le premier et le second?
Réponses:
L'option spéciale
--
signifie «traiter chaque argument après ce point comme un nom de fichier, peu importe à quoi il ressemble». Ce n'est pas spécifique à Git, c'est une convention générale de ligne de commande Unix. Normalement, vous l'utilisez pour clarifier qu'un argument est un nom de fichier plutôt qu'une option , par exemplegit checkout
1 prend également--
signifier que les arguments suivants ne sont pas le paramètre optionnel spécifiant « de treeish » que vous voulez engager.Donc, dans ce contexte, il est toujours sûr de l'utiliser
--
, mais vous en avez besoin lorsque le fichier que vous souhaitez restaurer a un nom qui commence par-
ou est le même que le nom d'une branche. Quelques exemples d'homonymie de branche / fichier:et désambiguïsation des options / fichiers:
Je ne sais pas ce que vous faites si vous avez une succursale dont le nom commence par
-
. Peut-être ne faites pas cela en premier lieu.1 dans ce mode; "checkout" peut également faire plusieurs autres choses. Je n'ai jamais compris pourquoi git a choisi d'implémenter "rejeter les modifications non validées" comme mode de la sous-commande "checkout", plutôt que "revert" comme la plupart des autres VCS, ou "reset" qui, je pense, pourrait avoir plus de sens dans les propres termes de git.
la source
--
comme séparateur entre les options et les arguments est largement implémenté. Il fonctionne pour tout programme / utilitaire qui utilise POSIXgetopt(3)
pour gérer ses options de ligne de commande, (voirman 3 getopt
), les scripts shell qui l'utilisentgetopt(1)
et certains programmes qui l'implémentent eux-mêmes, mais son fonctionnement n'est pas garanti universellement .--
signifiait `` annuler les changements '' à la C / C ++ - et je le pense depuis. L'esprit soufflé!Tout ce qui suit
--
est traité comme un nom de fichier (et non comme un argument de programme). Ceci est important si, par exemple, vous avez des noms de fichiers commençant par des tirets.la source