cornelius.weig@xxxxxxxxxxx writes: > Now, a reflog message is generated when creating a tag. The message > follows the pattern "commit: <subject>" where the subject is taken from > the commit the tag points to. For example: > "6e3a7b3 refs/tags/tag_with_reflog@{0}: commit: Git 2.12-rc0" Because the reflog records the actions, shouldn't it be saying that you "tagged"? The reflog for HEAD says things like "reset: moving to...", "am: $subject", and the reflog for a branch says things like "branch: created from master", "am: $subject", "rebase -i (finish)". For a tag, I would imagine something like "tag: tagged 4e59582ff7 ("Seventh batch for 2.12", 2017-01-23)" would be more appropriate. > Notes: > While playing around with tag reflogs I also found a bug that was present > before this patch. It manifests itself when the sha1-ref in the reflog does not > point to a commit object but something else. The underlying machinery for "log" and "rev-list" is about showing a stream of commits, and most of the reflog entries point at commits. On the other hand, the "walking reflogs to and show the sequence of the tip of refs", and there is no reason to expect the tip of refs will always be commits, but an ancient design mistake bolted the latter on top of the former (perhaps because in practice the tip of refs are almost always commits); "reflog" aka "log -g" and "rev-list --walk-reflogs" share the same issue coming from that misdesign, which needs to be corrected to solve this issue. The exact same design mistake also makes "git reflog" to accept options like "--topo-order", even though many of the options that make sense for the "commit DAG walking" (which is what "log" and "rev-list" are about) do not make any sense when walking a reflog. And the command would give nonsense output when given such an option, because a reflog is a single strand of pearl of objects (not necessarily commits) and the order in which these objects appear in the reflog does not have anything to do with the underlying commit DAG topology. Fixing the ancient misdesign would fix this issue, too. I think the fix would involve first ripping out the "reflog walking" code that was bolted on and stop allowing it to inject the entries taken from the reflog into the "walk the commit DAG" machinery. Then "reflog walking" code needs to be taught to have its own "now we got a single object to show, show it (using the helper functions to show a single object that is already used by 'git show')" code, instead of piggy-backing on the output codepath used by "log" and "rev-list".