"git checkout --" . vs git checkout

Git

Git Problem Overview


I always used git checkout -- . to clear my working directory. I thought I read somewhere that the -- was required to avoid git thinking you are passing parameters (or something)

Now a colleague told me I could drop the --, and indeed, a quick test did exactly the same.

Is there are any difference between those two commands?

PS: Asking here because git checkout -- . vs git checkout . is kind of hard to google...

Git Solutions


Solution 1 - Git

I seem to recall that the -- is a way to tell Git to treat what follows checkout as a file and not as a branch. Suppose that you had both a file and a branch called stuff. Then the following command would seem ambiguous:

git checkout stuff

because it is not clear whether you are asking to checkout a file or a branch. By using -- you explicitly tell Git to checkout a file by that name/path. So in this case the following commands allow checking out a branch and a file called stuff:

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

Note that git checkout <name> is really meant for branches, but Git syntax is relaxed, and if Git can't find a branch, then it will look for a file.

Closely related: https://stackoverflow.com/questions/25322335/git-change-branch-when-file-of-same-name-is-present

Solution 2 - Git

-- as a standalone argument (i.e. not part of another argument) is used by many UNIX command line programs to indicate that anything that follows it is not an argument.

Why? Well, in this case, it's being used in case you have a path whose name starts with --, which shouldn't be interpreted as its own argument.

i.e. git checkout -- --mydirectory which, without the -- would throw an error.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionLaoujinView Question on Stackoverflow
Solution 1 - GitTim BiegeleisenView Answer on Stackoverflow
Solution 2 - GitPowerlordView Answer on Stackoverflow