Personally I prefer command-line over tools. This has a few reasons;
- The command-line is always available;
- If you can do it by commandline, you can do it everywhere
- Using the command-line makes me look geeky
The reason for this post is that I grew tired of typing git log --one-line -10
that shows the last 10 commits and also having to type q
afterwards, where the information that I needed goes away, because I want to create a commit message that is in line with the rest of the commits.
So I decided to look into making it more pleasant for me to quickly get some history information from git.
The first thing I learned was that most git commands end up in a so called 'pager';
git log --oneline -10
e3aa791 (HEAD -> master) notes
81affbd docs: translated installation guide and moved errors to bottom
9a592cd docs: nearly there
aaa98fe docs: add stuff from the thing
c522b66 docs: generic docs
e09ee2b chore(Doc) sort
8740d11 chore(doc): add new stuff
bd8e74c notes after meeting
0de07df chore(Base): initial checkin
(END)
I discovered that I can bypass the pager so that git uses cat
by adding --no-pager
as first argument. It only works as a first argument.
--no-pager
git --no-pager log --oneline -10
➜ notes git:(master) git --no-pager log --oneline -10
e3aa791 (HEAD -> master) notes
81affbd docs: translated installation guide and moved errors to bottom
9a592cd docs: nearly there
aaa98fe docs: add kostenscherm
c522b66 docs: generic docs
e09ee2b chore(Doc) sort
8740d11 chore(doc): add new stuff
bd8e74c notes after meeting
0de07df chore(Base): initial checkin
➜ notes git:(master)
notice how I get my shell back and the information is still on my screen. Now I could write a git commit message in line with the rest.
So this solves part of my problem. I don't want to type the whole command as above over and over again. It is nice to remember it when you are working on someone else's machine, but in this case I want to 'save' it.
The good news is; you can. per command, you can toggle whether it should use pager.
In this case you can type:
git config --global pager.log false
➜ notes git:(master) git config --global pager.log false
➜ notes git:(master) git log -1
commit e3aa791e0e970023734988c8aeb736ecda6099f4 (HEAD -> master)
Author: Remi Kristelijn <remi.kristelijn@myawesomecompany.com>
Date: Fri Nov 29 15:51:02 2019 +0100
notes
➜ notes git:(master)
These settings are stored in ~/.gitconfig
Also I know with combination of --pretty
and --graph
you can decorate you log message and save this as an alias.
Adding an alias
The command I use is log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' -10
➜ git:(master) git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' -10
* d2a1b98 - (HEAD -> master, origin/master) Merge branch 'feat/wizard-steps' into 'master' (3 weeks ago) <Remi Kristelijn>
|\
| * 20b7b2e - (origin/feat/wizard-steps, feat/wizard-steps) feat:step 2 of wizard (3 weeks ago) <Remi Kristelijn>
| * 077f5e1 - feat: wizard placeholder (3 weeks ago) <Remi Kristelijn>
| * e2f4c29 - feat: add readme.md as an example (3 weeks ago) <Remi Kristelijn>
| * debbfcd - fix: hyperlink goes outside of context (3 weeks ago) <Remi Kristelijn>
| * af11d21 - feat:allow *.md imports for Typescript (3 weeks ago) <Remi Kristelijn>
|/
* cb562e3 - Merge branch 'feat/style' into 'master' (3 weeks ago) <Remi Kristelijn>
|\
| * 51df26c - (origin/feat/style, feat/style) fix:merge (3 weeks ago) <Remi Kristelijn>
| |\
| |/
|/|
* | 3583c92 - Merge branch 'feat/docs' into 'master' (3 weeks ago) <Remi Kristelijn>
|\ \
| * | ba0f827 - (origin/feat/docs) docs:add loglevel (3 weeks ago) <Remi Kristelijn>%
To save this command as an alias, let's say lg
git config --global alias.lg log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' -10
Then you can flag this command to also not use 'pager'
git config --global pager.lg false
But because log is already flagged false for pager, it will cary that through when using lg.