git log –oneline gives HEAD information that is lost when piping or redirecting to file

Issue

When I do a git log –oneline command with no piping or file redirection, it gives information about the HEAD location and the branch (master in the example below)

 $ git log --oneline --color=never

8bc8511 (HEAD -> day_20190316) Today # 12
1381438 Today # 11
d87d53a Today # 10
718aef9 Today # 9
b05e17e Today # 8
....
2643d93 (master) Initial commit

However when I pipe this through less, or redirect it into a file, the HEAD and master information go away. I’ve tried redirecting stderr to join stdout, but this makes no difference.

$ git log –oneline –color=never 2>&1 | /usr/bin/more

8bc8511 Today # 12
1381438 Today # 11
d87d53a Today # 10
718aef9 Today # 9
b05e17e Today # 8
.....
2643d93 Initial commit

I’d like to access that information, but how?

Solution

Use the --decorate flag

git log --oneline --decorate --color=never | less

From the git docs

–decorate[=short|full|auto|no]

Print out the ref names of any commits that are shown. If short is specified, the ref name prefixes refs/heads/, refs/tags/ and refs/remotes/ will not be printed. If full is specified, the full ref name (including prefix) will be printed. If auto is specified, then if the output is going to a terminal, the ref names are shown as if short were given, otherwise no ref names are shown. The option –decorate is short-hand for –decorate=short. Default to configuration value of log.decorate if configured, otherwise, auto.

the default when --decorate is not specified is auto, meaning "add HEAD info if going to terminal, otherwise don’t". When you specify --decorate without an argument, it defaults to short, which is the short HEAD info you referenced in the question.

Answered By – jeremysprofile

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published