511

I am fairly new to Github and have come across an amateur-ish problem.

I have been asked to do a code review and have been provided with a commit hash, however I have tried looking in Git if I can search using commit hashes but couldn't find anything.

Is there a way I can find the changed code just by using the commit hash?

5
  • 102
    I find it utterly bizarre that github doesn't recognise hashes in searches and show you the commit if there's one matching that hash. Commented Dec 3, 2015 at 13:45
  • Actually @CraigRinger, github search will match hashes if they occur in a pull request. Indeed, you can search the whole of github for a seven-character hash prefix if you like. But it must be a pull request, not just any commit. Commented Sep 26, 2016 at 12:24
  • 12
    @ToddOwen Which is nice, but not the point. It should match commit hashes within a repo when you search within that repo, it's truly wacky that it does not. Commented Sep 27, 2016 at 2:40
  • 6
    @CraigRinger It does now, at last! See my new answer. Commented May 31, 2017 at 0:32
  • hash:<sha> since 2017 via ⬇️ Commented Sep 10, 2022 at 9:38

4 Answers 4

618

A URL of the form https://github.com/<owner>/<project>/commit/<hash> will show you the changes introduced in that commit. For example here's a recent bugfix I made to one of my projects on GitHub:

https://github.com/jerith666/git-graph/commit/35e32b6a00dec02ae7d7c45c6b7106779a124685

You can also shorten the hash to any unique prefix, like so:

https://github.com/jerith666/git-graph/commit/35e32b


I know you just asked about GitHub, but for completeness: If you have the repository checked out, from the command line, you can achieve basically the same thing with either of these commands (unique prefixes work here too):

git show 35e32b6a00dec02ae7d7c45c6b7106779a124685
git log -p -1 35e32b6a00dec02ae7d7c45c6b7106779a124685

Note: If you shorten the commit hash too far, the command line gives you a helpful disambiguation message, but GitHub will just return a 404.

Sign up to request clarification or add additional context in comments.

10 Comments

i came across this when trying to trace an assertion in mongo, and found that there's a similar URL pattern to view a specific file, given the hash of a commit: github.com/$owner/$project/blob/$hash/path/to/file.ext - e.g. github.com/mongodb/mongo/blob/…
In this: git log -p -1 35e32b6a00dec02ae7d7c45c6b7106779a124685, the -1 is necessary because otherwise it would show all the olders commits; it's good to know that you can use the four initial numbers of the hash (the minimum in my tests), because there’s no auto completion for the hash; and you can't specify the branch like this: git log master -p -1 35e3. Git version: 1.7.9.5.
In case anyone's wondering (I was!), this also works with the first 8 of the hash both on github: github.com/jerith666/git-graph/commit/35e32b6a and on the command line: git log -p -1 35e32b6a
It's kind of dumb that the UI doesn't make this easier than it is... I hope the feature request will make it.
The UI now supports this. Do a search for hash:<sha> and Voila!
|
102

View single commit:
https://github.com/<user>/<project>/commit/<hash>

View log:
https://github.com/<user>/<project>/commits/<hash>

View full repo:
https://github.com/<user>/<project>/tree/<hash>

<hash> can be any length as long as it is unique.

2 Comments

if the length is at least 7 characters it is ok
No minimum length for the commit hash is 4 characters (again, as long as it is unique in the entire repository)
60

The ability to search commits has recently been added to GitHub.

To search for a hash, just enter at least the first 7 characters in the search box. Then on the results page, click the "Commits" tab to see matching commits (but only on the default branch, usually master), or the "Issues" tab to see pull requests containing the commit.

To be more explicit you can add the hash: prefix to the search, but it's not really necessary.

There is also a REST API (at the time of writing it is still in preview).

6 Comments

I am surprised that it actually works this way. It's so not intuitive. By default Github will show the "Code" tab, with obviously no results in it. Shouldn't it show the only tab with any results in it by default?
So to be clear, if you have your own enterprise install of github, you can find any commit in any repo by searching for it like so: https://YourGithubDomain/search?q=YOUR_COMMIT_HASH&type=Commits Note that I tried this on Github as well, and it worked there too e.g. https://github.com/search?q=38db172d13962ea177c00c9a3b4b3169b317e94b&type=Commits
@Todd I haven't been able to get this working once in our repo. The other solution using the URL works great though.
Seems kind of crazy in 2022 we still can't search for a hash across all branches using GitHub.com search. The URL-based solution in the accepted answer is clunky but will likely work reliably until the end of time.
To search for a hash across all branches, I had to use git show -s <hash> within the repo on my local.
|
4

With the GitHub CLI gh v2.22.0 (Jan. 2023), you can search from within your local cloned GitHub repository:

See gh search commits:

Examples:

# search commits matching hash "8dd03144ffdc6c0d486d6b705f9c7fba871ee7c3"
$ gh search commits --hash=8dd03144ffdc6c0d486d6b705f9c7fba871ee7c3

But also:

# search commits matching set of keywords "readme" and "typo"
$ gh search commits readme typo

# search commits matching phrase "bug fix"
$ gh search commits "bug fix"

# search commits committed by user "monalisa"
$ gh search commits --committer=monalisa

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.