88

Given a GitHub repository, how can I quickly find the date of its first commit?

I often want to know how old the project is, but I cannot find a quick way to get to the start of the commit histories for projects with very long commit histories.

1

9 Answers 9

106

Click on the "Insights" tab of the repository that you want to see the oldest commit, followed by the "Network" sub-tab on the left menu bar. When the page is fully loaded (i.e. you can see lots of lines joining and all), press Shift+ to go all the way to the first commit. Click on the dot that represents the first commit and you can get it.

Note: This only works for repositories that was created on GitHub originally, not repositories that were imported from another place (i.e. commits not registered through GitHub itself). Also, this method may not necessarily work if the repository has too many forks.

Alternatively, you can clone the repository to your local machine and run the following command:

git log --reverse

The repository's commits will then be shown in reverse order (oldest commit first).

5
  • 4
    Doesn't work if the repo has too many forks.
    – Mike McKay
    May 22, 2015 at 21:10
  • 3
    "Network" is found under the "Graphs" side tab (just in case)
    – Jedidja
    May 30, 2015 at 14:12
  • Doesn't work if the default branch doesn't have the earliest commit.
    – OrangeDog
    Dec 6, 2016 at 10:55
  • There's a similar question on Stack Overflow. Would you mind cross-posting this answer?
    – Stevoisiak
    Mar 16, 2018 at 13:22
  • -1 doesn't work with --reverse to get the oldest commit because the limit happens before the filter. Oct 17, 2019 at 9:22
23

If you have cloned the repo, just use git commands as usual:

// cd to repo
$ git log --reverse

it will show you the history of commits in reverse order

18

Hydra's answer may not work with projects that have a lot of forks: "Couldn't load network graph. Too many forks to display."

You can check the 'Contributors' tab under 'Insights'

"Contributors" tab in "Insights"

5
  • If you select the very left edge of the graph using the brush, then click on the # commits for the first committer, you'll actually see the commits.
    – Gordon
    Oct 18, 2016 at 12:20
  • @Gordon that is not very helpful, it just shows all commits for that person
    – Zombo
    Nov 30, 2016 at 1:33
  • @StevenPenny, the question was just how to get the date of the first commit. Granted, it's messy, but if you select just the very left edge, you'll see the first commit. I prefer the dedicated site I linked in my answer below.
    – Gordon
    Nov 30, 2016 at 1:49
  • Doesn't work if the default branch doesn't have the earliest commit.
    – OrangeDog
    Dec 6, 2016 at 10:55
  • This is the best Jan 30, 2017 at 14:55
2

This will get you the last page:

<?php
$s_url = $argv[1] . '/commits?page=';
$n_hi = 1;

while (true) {
   $s_hi = sprintf('%s%d', $s_url, $n_hi);
   echo $s_hi, "\t";
   $s_get = file_get_contents($s_hi);
   if (strpos($s_get, 'No commits found') !== false) {
      echo "Not Found\n";
      break;
   }
   echo "OK\n";
   $n_lo = $n_hi;
   $n_hi *= 2;
}

while (true) {
   $n_mid = intdiv($n_lo + $n_hi, 2);
   if ($n_mid == $n_lo) {
      break;
   }
   $s_mid = sprintf('%s%d', $s_url, $n_mid);
   echo $s_mid, "\t";
   $s_get = file_get_contents($s_mid);
   if (strpos($s_get, 'No commits found') !== false) {
      echo "Not Found\n";
      $n_hi = $n_mid;
   } else {
      echo "OK\n";
      $n_lo = $n_mid;
   }
}

Example:

PS C:\> git.php https://github.com/jp9000/OBS
https://github.com/jp9000/OBS/commits?page=1    OK
https://github.com/jp9000/OBS/commits?page=2    OK
https://github.com/jp9000/OBS/commits?page=4    OK
https://github.com/jp9000/OBS/commits?page=8    OK
https://github.com/jp9000/OBS/commits?page=16   OK
https://github.com/jp9000/OBS/commits?page=32   OK
https://github.com/jp9000/OBS/commits?page=64   OK
https://github.com/jp9000/OBS/commits?page=128  Not Found
https://github.com/jp9000/OBS/commits?page=96   Not Found
https://github.com/jp9000/OBS/commits?page=80   Not Found
https://github.com/jp9000/OBS/commits?page=72   OK
https://github.com/jp9000/OBS/commits?page=76   OK
https://github.com/jp9000/OBS/commits?page=78   OK
https://github.com/jp9000/OBS/commits?page=79   OK
1

You can use unix sed tool for filtering just the date of the first commit using

git log --reverse | sed -n -e "3,3p" 

I think it is exactly you need.

1

As Git applies the --reverse after any filtering of commits, you need to output --all commits and use other commands to restrict the output. You can use the formatting options to get the output you like.

Get just the date of the first commit

Using the %as format to display the author date in short format.

$ git log --reverse --format="format:%as" --all | head -n 1
2017-10-10
Get the date in ISO 8601 format of the first commit
$ git log --reverse --format="format:%aI" --all | head -n 1
2017-10-10T18:27:11+02:00
Get just the year of the first commit

By using %ad output format, the --date format is respected. And here we can use additional formatting %Y to select just the year.

$ git log --reverse --date="format:%Y" --format="format:%ad" | head -n 1
2017
Get more details of the first commit

Just select the 3 lines that summarize the commit details as git log does in the normal output.

$ git log --reverse --all | head -n 3
commit aa00aa00aa00aa00aa00aa00aa00aa00aa00aa00
Author: Name Surname <name.surname@organization.com>
Date:   Tue Oct 10 18:27:11 2017 +0200

Note that there is no need to reverse if you format and use other commands to filter the relevant commit. You could use tail instead of head for example. But a reversed list can be easier to work with if you need more details, like I show in my example to print the commit metadata.

Note that Git keeps track of both the 'author date' and the 'committer date'. The above commands use the author date %as but you can get the committer date by replacing the %a for %c like %cs. In the default 'medium' type git log output the 'author date' is shown.

-1

There is a way to do it from the GitHub interface itself.

Go the the project page and pick the Code tab followed by the Commits sub-tab as shown here:

enter image description here

That brings you to your list of commits. If you then scroll to the bottom of the page, you can keep going back in time by clicking the Older button.

I couldn't really find a way to sort it so that the commits shown in ascending order.

1
  • 10
    I already knew that. The question was for projects with very long commit histories.
    – Randomblue
    May 3, 2013 at 7:35
-2
git log --reverse --format="format:%ci" | sed -n 1p

If you want to get it from a command line

-2

None of the solutions listed above worked for me. git log --reverse does not work if there are a lot of forks in your tree. The script mentioned by @steven-penny did not work because github changed their urls to use a hash for the after query param value when browsing commints /master?after=Y3Vyc29yOvqNPhkVDBdTgRaxBYnOx1jBe88LKzM0 and neither did any of the graphs for the repo.

So what did work for me was quite simple. gitk. Using gitk and scrolling down to the last commit gave me the information I was looking.

Hope this helps other folks looking for similar info.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.