gitgit-loggit-showgit-notes

Filter git log to show only commits with notes


How can I dump a log of my commits showing only the ones with notes of a given namespace?

Commits without notes, or notes not belonging to a given namespace should be filtered out

In the text dump I do not want just the note, also the commit info.

I have played with: git show refs/notes/<namespace> and I believe the solution might be there rather than with "git log". However I am still having some problems to find the right command showing also all commits.


Solution

  • git notes will give you the id of each note and what object it applies to. So the second column is what you want.

    $ git notes
    f5ac8874676de3029ffc8c31935644ff7c4deae0 07ca160c58cf259fe8bb5e87b9d9a7cbf8845f87
    62ecfc95355587d6d1f779fcaca6e4f53d088ccc eb6c60b9dcb56219d9d882759c0bf928f6d6c3fa
    

    Grab that last column using cut and pass them into git show.

    [ "$(git notes)" = "" ] || git notes \
    | cut -d' ' -f2 \
    | xargs git show
    

    To pick a specific namespace, add a --ref=namespace to git notes.

    [ "$(git notes --ref=namespace)" = "" ] || git notes --ref=namespace \
    | cut -d' ' -f2 
    | xargs git show
    

    The initial test, [...], prevents a slight problem: git show will show the current checkout if passed no arguments. So if there's no notes you're going to get misleading output. With the initial test that's not a problem: if the test fails, i.e., if there's no notes, then git show won't be called.