http://norbauer.com/notebooks/code/notes/git-revert-reset-a-single-file
Eu encontrei uma postagem.
Mas ainda não sei qual é a diferença entre
git checkout <filename>
git checkout -- <filename>
Em que situação devo usar o primeiro e o segundo, respectivamente?
Respostas:
A "opção" especial
--
significa "tratar cada argumento após este ponto como um nome de arquivo, não importa sua aparência." Isso não é específico do Git, é uma convenção geral de linha de comando do Unix. Normalmente você o usa para esclarecer que um argumento é um nome de arquivo em vez de uma opção , por exemplogit checkout
1 também--
significa que os argumentos subsequentes não são seu parâmetro opcional "em árvore" especificando qual commit você deseja.Portanto, neste contexto, é seguro usar
--
sempre, mas você precisa dele quando o arquivo que deseja reverter tem um nome que começa com-
, ou é igual ao nome de um branch. Alguns exemplos para desambiguação de branch / arquivo:e desambiguação de opção / arquivo:
Não tenho certeza do que você faz se tiver uma filial cujo nome começa com
-
. Talvez não faça isso em primeiro lugar.1 neste modo; "checkout" pode fazer várias outras coisas também. Eu nunca entendi por que o git escolheu implementar "descartar alterações não confirmadas" como um modo do subcomando "checkout", em vez de "reverter" como a maioria dos outros VCSes, ou "redefinir", o que acho que pode fazer mais sentido nos termos do próprio git.
fonte
--
como um separador entre opções e argumentos é amplamente implementado. Ele funciona para qualquer programa / utilitário que use POSIXgetopt(3)
para lidar com suas opções de linha de comando (consulteman 3 getopt
Recursos), scripts de shell que usamgetopt(1)
e alguns programas que os implementam, mas não é universalmente garantido que funcione.--
significava 'negar alterações' a la C / C ++ - e tenho pensado nisso desde então. Mente estourada!Qualquer coisa após o
--
é tratada como um nome de arquivo (não como um argumento de programa). Isso é importante se, por exemplo, você tiver nomes de arquivo que começam com travessões.fonte