On Thu, Sep 29, 2016 at 07:36:27AM -0700, Kyle J. McKay wrote: > On Sep 29, 2016, at 06:24, Jeff King wrote: > > > > If you are doing "git show 235234" it should pick the tag (if it > > > peels to a > > > committish) because Git has already set a precedent of preferring > > > tags over > > > commits when it disambiguates ref names and otherwise pick the > > > commit. > > > > I'm not convinced that picking the tag is actually helpful in this case; > > I agree with Linus that feeding something to "git show" almost always > > wants to choose the commit. > > Since "git show" peels tags you end up seeing the commit it refers to > (assuming it's a committish tag). Yes, but it's almost certainly _not_ the commit you meant. From your example: > c512b03: > c512b035556eff4d commit Merge branch 'rc/maint-reflog-msg-for-forced > c512b0344196931a tag (v0.99.9a) GIT 0.99.9a If I'm looking for the commit c512b03, then it almost certainly isn't v0.99.9a. That tag's commit is e634aec. Or another way of thinking about it: you want to guess what the _writer_ of the note meant. Why would somebody write "c512b03" when they could have written "v0.99.9a"? And they certainly would not have written it if they meant "e634aec". :) > > I also don't think tag ambiguity in short sha1s is all that interesting. > > The Linux repository has this: > > 901069c: > 901069c71415a76d commit iwlagn: change Copyright to 2011 > 901069c5c5b15532 tag (v2.6.38-rc4) Linux 2.6.38-rc4 Sure, I'm not surprised there's a collision. But I'd expect those to be a tiny fraction of collisions. Here's the breakdown of object types in my clone of linux.git: $ git cat-file --batch-all-objects --batch-check='%(objecttype)' | sort | uniq -c 1421198 blob 618073 commit 479 tag 2877913 tree That's a hundredth of a percent tag objects. The chance that you have _a_ 7-hex collision with a tag is relatively high. But the chance that any given collision involves a tag is rather small. -Peff