Search code examples
gitformatgit-branchgit-log

Why does a pipe remove the branch names from git log?


when I run

> git log --oneline

I get output that looks like this

abcdef0 (head, branch, origin/branch) comment
0987654 different comment
1234567 (different-branch, origin/branch) third comment

But as soon as I pipe the output to anything (e.g. > git log --oneline | cat), the branch names are gone

abcdef0 comment
0987654 different comment
1234567 third comment

This means I can't grep, or add line numbers, or anything like that.

(It's also missing the colors and less style behavior, but I don't care about that either way today)

Is this something I can re-enable via a command-line parameter?


Solution

  • For start, I too had noticed the lack of colors after a pipe to bash, but what you describe about decorations (branch and tag names) disappearing is odd. Let's adress them separately.

    Adressing the branch names (decorations) themselves

    --decorate
    

    is the flag for that, for a one-shot use.

    For the permanent effect, you can set it in your config

    log.decorate true
    

    And for a more specific need, note you can use it in a pretty format, with the placeholder %d, for example :

    git log -10 --pretty=format:"%C(yellow)%h %C(reset)%aN %ar %C(red)%d %C(reset)%s"
    

    for a result that looks like this

    enter image description here

    About colors

    No, I don't know how / why it breaks when it's passed to bash, I'll let more advanced users answer that part. (and as I said, on a personal note I'm very glad you asked this question because I'm eager to know that too - Edit : thanks torek! :-) )