Difference between “git checkout ” and “git checkout -​-

后端 未结 2 1097
花落未央
花落未央 2020-11-29 16:41

http://norbauer.com/notebooks/code/notes/git-revert-reset-a-single-file

I have found a post.

But still don\'t know what is the difference between

相关标签:
2条回答
  • 2020-11-29 16:47

    Anything following the -- is treated as a filename (not as a program argument). This is important if, for example, you have filenames which start with dashes.

    0 讨论(0)
  • 2020-11-29 17:05

    The special "option" -- means "treat every argument after this point as a file name, no matter what it looks like." This is not Git-specific, it's a general Unix command line convention. Normally you use it to clarify that an argument is a file name rather than an option, e.g.

    rm -f      # does nothing
    rm -- -f   # deletes a file named "-f"
    

    git checkout1 also takes -- to mean that subsequent arguments are not its optional "treeish" parameter specifying which commit you want.

    So in this context it's safe to use -- always, but you need it when the file you want to revert has a name that begins with -, or is the same as the name of a branch. Some examples for branch/file disambiguation:

    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"
    

    and option/file disambiguation:

    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"
    

    I'm not sure what you do if you have a branch whose name begins with -. Perhaps don't do that in the first place.


    1 in this mode; "checkout" can do several other things as well. I have never understood why git chose to implement "discard uncommitted changes" as a mode of the "checkout" subcommand, rather than "revert" like most other VCSes, or "reset" which I think might make more sense in git's own terms.

    0 讨论(0)
提交回复
热议问题