Given long git commit how to safely get short commit

941 Views Asked by At

If I query the bitbucket api for commits, I get the long version:

bitbucket_curl(){
    curl -H 'Authorization:Basic YW1JyKg==' "https://api.bitbucket.org$@"
}

commits="$(bitbucket_curl '/2.0/repositories/interos/datavana/commits/alex/dockerize?pagelen=3')"

latest_commit="$(echo "$commits" | jq -r '.values[0].hash')"

given a long commit: c56cefbd0c81142558cf814cba7d7cd75d7cb6a7

is there a way to reliably get the short commit hash? Isn't it like the last 10 chars or something? Or perhaps there is a way to request the short hash from the Bitbucket API? On that subject I am looking for a reliable way to get the most recent commit for a branch.

2

There are 2 best solutions below

1
Tim Biegeleisen On BEST ANSWER

I don't know the Bitbucket API well, and whether or not its endpoints require the full SHA-1 hash, but as far as I know there is no official short version of commit hash. The only general requirement is that the fragment of a hash used can correctly resolve to just a single commit.

Bitbucket web seems to display only the first 7 characters of the SHA-1 hash. There are roughly 78 billion different hashes of length 7, so it would be unlikely to have a collision on a single page.

2
Snailedlt On

git has a command to get the short version of a commit hash, given the full commit hash as input.

git rev-parse --short $commit

If the $commit is c56cefbd0c81142558cf814cba7d7cd75d7cb6a7, this would output c56cefb

Found the solution in this SO answer by mark-longair