When there is only one argument given and it is not -- (e.g. git checkout abc), and when the argument is both a valid
(e.g. a branch abc exists) and a valid (e.g. a file or a directory whose name is "abc" exists), Git would usually ask you to disambiguate. Because checking out a branch is so common an operation, however, git checkout abc takes "abc" as a in such a situation. Use git checkout -- if you want to checkout these paths out of the index.
git checkout -- filename不会产生歧义。