Last time I checked, git was the most used command in my history. Git is one of the first software I install on a new machine, with Vim.

Here’s all the stuff I collected about Git, that helped me better understand it and learn to use it properly.


Tutorials (beginner)

Tips & tricks


See how it works in the background

Reimplementing Git

Workflow & branching

The Kitty way

Other interesting stuff

Commit messages

Personal notes


Handling patches and pull requests

Especially, the part about “slightly modifying patches” in the first three links:

If you are a subsystem or branch maintainer, sometimes you need to slightly modify patches you receive in order to merge them, because the code is not exactly the same in your tree and the submitters’. If you stick strictly to rule C, you should ask the submitter to rediff, but this is a totally counter-productive waste of time and energy. Rule B allows you to adjust the code, but then it is very impolite to change one submitter’s code and make him endorse your bugs. To solve this problem, it is recommended that you add a line between the last Signed-off-by header and yours, indicating the nature of your changes. While there is nothing mandatory about this, it seems like prepending the description with your mail and/or name, all enclosed in square brackets, is noticeable enough to make it obvious that you are responsible for last-minute changes. Example:

Signed-off-by: Random J Developer <>
[ struct foo moved from foo.c to foo.h]
Signed-off-by: Lucky K Maintainer <>

This practice is particularly helpful if you maintain a stable branch and want at the same time to credit the author, track changes, merge the fix, and protect the submitter from complaints. Note that under no circumstances can you change the author’s identity (the From header), as it is the one which appears in the changelog.

So, in summary:

Commit summary

Longer description of the commit.

Closes #42.

[email@domain: fix summary]
[email@domain: fix summary that can be longer and span on multple lines
if needed, though it's still not capitalized nor have a period]

Clone the Linux kernel Git repository and search for \[.*@ to see how it’s used.