On Wed, Nov 22, 2017 at 06:19:23AM -0500, Robert P. J. Day wrote: > On Wed, 22 Nov 2017, Junio C Hamano wrote: > > > "Robert P. J. Day" <rpjday@xxxxxxxxxxxxxx> writes: > > > > > git repo with a file called "Gemfile", so i created a branch called > > > "Gemfile", and when i ran: > > > > > > $ git checkout Gemfile > > > > > > git switched to the branch. so even with the ambiguity, git > > > obviously has some sort of precedence order it checks. so what are > > > the rules here? > > > > 31b83f36 ("Merge branch 'nd/checkout-disambiguation'", 2016-09-26) > > should have made it clear that the "checkout" command has a > > convenience special case. > > ok, then i'm still curious about git examples that actually fail due > to an inability to disambiguate. > > rday Here is an example with git diff $ git init git-disambiguate $ cd git-disambiguate $ echo 1 >foo && git add foo && git commit -m foo $ git branch foo $ echo 2 >>foo && git add foo && git commit -m foo2 $ echo 3 >>foo $ git diff foo fatal: ambiguous argument 'foo': both revision and filename Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]' $ git diff HEAD foo fatal: ambiguous argument 'foo': both revision and filename Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]' $ git diff HEAD -- foo diff --git a/foo b/foo index 1191247..01e79c3 100644 --- a/foo +++ b/foo @@ -1,2 +1,3 @@ 1 2 +3 $ git diff HEAD foo -- diff --git a/foo b/foo index 1191247..d00491f 100644 --- a/foo +++ b/foo @@ -1,2 +1 @@ 1 -2