On Fri, Mar 23, 2012 at 06:43:37PM +0100, Sven Strickroth wrote: > Really problematic is checkout: > "git checkout heads/foo" creates a detached HEAD (is this intended). > However, "git checkout heads/foo -B foo" can be used. Checkout is unlike regular ref lookup in that it prefers branches to other forms (because it is fundamentally a branch operation). So "git checkout foo" should always choose "refs/heads/foo". We do still seem to give the ambiguity warning, though, which seems like overkill. I think that generally people would want to get rid of ambiguous refs as soon as they notice them, as they are a recipe for disaster. So the warning being annoying has not been considered a huge problem. > Is there a git command to find out if a name is ambiguous? > "git rev-parse foo" outputs "warning: refname 'test' is ambiguous.", but > the return code is zero. I think you could do: case "$(git show-ref --tags --heads $name | wc -l)" in 0) echo "$name does not exist" ;; 1) echo "$name is unambiguous" ;; *) echo "$name is ambiguous" ;; esac You could also get a list of all ambiguous refs like this: git for-each-ref --format='%(refname:short)' refs/heads refs/tags | egrep '^(heads|tags)' The ":short" modifier will shorten names unambiguously, so it ends up leaving the "heads" and "tags" in for ambiguous names. -Peff -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html