How to link to a specific line number on GitHub

Don’t just link to the line numbers! Be sure to use the canonical URL too. Otherwise when that file is updated, you’ll have a URL that points to the wrong lines!

How to make a permanent link to the right lines:

Click on the line number you want (like line 18), and the URL in your browser will get a #L18 tacked onto the end. You literally click on the 18 at the left side, not the line of code. Looks like this:

line 18 selected

And now your browser’s URL looks like this:

https://github.com/git/git/blob/master/README.md?plain=1#L18

If you want multiple lines selected, simply hold down the Shift key and click a second line number, like line 20. Looks like this:

Enter image description here

And now your browser’s URL looks like this:

https://github.com/git/git/blob/master/README.md?plain=1#L18-L20

Here’s the important part:

Now get the canonical URL for that particular commit by pressing the Y key. The URL in your browser will change to become something like this:

https://github.com/git/git/blob/5bdb7a78adf2a2656a1915e6fa656aecb45c1fc3/README#L18-L20

That link contains the actual SHA-1 hash for that particular commit, rather than the current version of the file on master. That means that this link will work forever and not point to lines 18-20 of whatever future version of that file might contain.

Now bask in the glow of your new permanent link. 😉

As pointed out by watashiSHUN, GitHub has now made it easier to get the permanent link by providing a ... menu on the left after you select one or more lines. Please see watashiSHUN’s answer too.

GitHub permalink menu

Case in point — in the example above, I referred to the “README” file in the URL. Those non-canonical URLs actually worked when this answer was written. But now those URLs no longer work since README was moved to README.md. But the canonical URL with the SHA-1 hash still works, just as expected.

Some files are “renderable”, like Markdown files. GitHub requires ?plain=1 to show the content of them instead of rendering.

Leave a Comment