"Johannes Schindelin via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > From: Johannes Schindelin <johannes.schindelin@xxxxxx> > > When switching a branch *and* updating said branch to a different > revision, let's avoid a double entry by first updating the branch and > then adjusting the symbolic ref HEAD. Ah, in the original sequence, HEAD is updated twice, leaving two reflog entries for HEAD (and one for the underlying "switch_to" branch by virtue of REF_UPDATE_VIA_HEAD). In the new sequence, update_ref() updates the underlying "switch_to" and then HEAD, so we'd get one reflog entry for each of them. Makes sense. s/let's avoid a double entry/& in HEAD's reflog/ would have avoided wasting reader's time who needlessly wondered where that redundancy came from, though. > > Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> > --- > builtin/rebase.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/builtin/rebase.c b/builtin/rebase.c > index e1dfa74ca8..768bea0da8 100644 > --- a/builtin/rebase.c > +++ b/builtin/rebase.c > @@ -438,10 +438,11 @@ static int reset_head(struct object_id *oid, const char *action, > detach_head ? REF_NO_DEREF : 0, > UPDATE_REFS_MSG_ON_ERR); > else { > - ret = create_symref("HEAD", switch_to_branch, msg.buf); > + ret = update_ref(reflog_orig_head, switch_to_branch, oid, > + NULL, 0, UPDATE_REFS_MSG_ON_ERR); > if (!ret) > - ret = update_ref(reflog_head, "HEAD", oid, NULL, 0, > - UPDATE_REFS_MSG_ON_ERR); > + ret = create_symref("HEAD", switch_to_branch, > + reflog_head); > } > > leave_reset_head: