La speciale "opzione" --
significa "tratta ogni argomento dopo questo punto come un nome di file, indipendentemente da come appare". Non è specifico di Git, è una convenzione generale della riga di comando di Unix. Normalmente lo usi per chiarire che un argomento è un nome di file piuttosto che un'opzione , ad es
rm -f # does nothing
rm -- -f # deletes a file named "-f"
git checkout
1 vuole anche --
significare che gli argomenti successivi non sono il suo parametro "treeish" opzionale che specifica quale commit si desidera.
Quindi in questo contesto è sicuro da usare --
sempre, ma ne hai bisogno quando il file che vuoi ripristinare ha un nome che inizia con -
o è uguale al nome di un ramo. Alcuni esempi di disambiguazione di rami / file:
git checkout README # would normally discard uncommitted changes
# to the _file_ "README"
git checkout master # would normally switch the working copy to
# the _branch_ "master"
git checkout -- master # discard uncommitted changes to the _file_ "master"
e disambiguazione di opzioni / file:
git checkout -p -- README # interactively discard uncommitted changes
# to the file "README"
git checkout -- -p README # unconditionally discard all uncommitted
# changes to the files "-p" and "README"
Non sono sicuro di cosa fai se hai un ramo il cui nome inizia con -
. Forse non farlo in primo luogo.
1 in questa modalità; "checkout" può fare anche molte altre cose. Non ho mai capito perché git abbia scelto di implementare "scarta modifiche non salvate" come modalità del sottocomando "checkout", piuttosto che "revert" come la maggior parte degli altri VCS, o "reset" che penso potrebbe avere più senso nei termini di git.