[Sorry for the slow response.] Jeff King <peff@xxxxxxxx> writes: > On Mon, Jan 16, 2017 at 06:17:29PM -0500, Kyle Meyer wrote: [...] >> $ cat .git/logs/refs/heads/new-master >> 00000... 68730... Kyle Meyer <kyle@xxxxxxxxxx> 1484607020 -0500 commit (initial): Add file.txt >> 68730... 68730... Kyle Meyer <kyle@xxxxxxxxxx> 1484607020 -0500 Branch: renamed refs/heads/master to refs/heads/new-master >> >> $ cat .git/logs/HEAD >> 00000... 68730... Kyle Meyer <kyle@xxxxxxxxxx> 1484607020 -0500 commit (initial): Add file.txt >> 68730... 00000... Kyle Meyer <kyle@xxxxxxxxxx> 1484607020 -0500 >> >> I expected the second line of .git/logs/HEAD to mirror the second line >> of .git/logs/refs/heads/new-master. Are the empty message and null sha1 >> in HEAD's entry intentional? > > The null sha1 is correct, I think. The branch we were on went away, and > we use the null sha1 to indicate "no value" in both the creation and > deletion cases. I see, thanks. > I'd say there are two potential improvements: > > - delete_ref() should take a reflog message argument, in case it > updates the HEAD reflog (as a bonus, this will future-proof us for a > day when we might keep reflogs for deleted refs). I've tried to do this in the following patches. > - "git branch -m" does seem to realize when we are renaming HEAD, > because it updates HEAD to point to the new branch name. But it > should probably insert another reflog entry mentioning the rename > (we do for "git checkout foo", even when "foo" has the same sha1 as > the current HEAD). I haven't worked out how to do this part yet. I'm guessing the change will involve modifying split_head_update(). If this is added, should it be instead of, rather than in addition to, the deletion entry? If a "Branch: renamed ..." entry is present, it doesn't seem like the deletion entry is providing any additional information. delete_refs(): accept a reflog message argument update-ref: pass reflog message argument to delete_refs rename_ref: replace empty deletion message in HEAD's log builtin/am.c | 4 ++-- builtin/branch.c | 2 +- builtin/notes.c | 4 ++-- builtin/remote.c | 4 ++-- builtin/replace.c | 2 +- builtin/reset.c | 2 +- builtin/symbolic-ref.c | 2 +- builtin/tag.c | 2 +- builtin/update-ref.c | 2 +- fast-import.c | 2 +- refs.c | 4 ++-- refs.h | 2 +- refs/files-backend.c | 12 +++++++++--- t/t1400-update-ref.sh | 9 +++++++++ t/t3200-branch.sh | 4 ++++ transport.c | 2 +- 16 files changed, 39 insertions(+), 20 deletions(-) -- Kyle