Re: git symbolic-ref vs. reflog (vs. rebase)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Apr 29, 2011 at 10:51:31PM +0530, Csaba Henk wrote:

> > Yes, it is. ÂBut you can choose to do:
> >
> > Â Â Â Â$ git branch side
> > Â Â Â Â$ git symoblic-ref -m "move to side" HEAD refs/heads/side
> > Â Â Â Â$ git log --oneline -g HEAD@{0}
> > Â Â Â Â05ddb9b HEAD@{0}: move to side
> > Â Â Â Âe69de29 HEAD@{1}: commit (initial): first commit
> >
> > if you wanted to.
> 
> So do you think the following patch would be the correct fix for the
> rebase issue:
> 
> diff --git a/git-rebase.sh b/git-rebase.sh
> index cbb0ea9..10c1727 100755
> --- a/git-rebase.sh
> +++ b/git-rebase.sh
> @@ -284,7 +284,7 @@ do
>                 head_name="$(cat "$dotest"/head-name)" &&
>                 case "$head_name" in
>                 refs/*)
> -                       git symbolic-ref HEAD $head_name ||
> +                       git symbolic-ref -m "rebase: aborting" HEAD
> $head_name ||
>                         die "Could not move back to $head_name"
>                         ;;
>                 esac

I count 2 uses of symbolic-ref without reflogs in git-rebase, one more
in git-rebase--interactive, and one in git-cvsexportcommit. Should all
be fixed to write a reflog entry?

The one in git-rebase.sh:move_to_original_branch even takes care to
write a reflog message when updating the ref. So the branch reflog has
an entry for the rebase being finished, but the HEAD reflog gets
nothing. Presumably it's OK because we're moving from the detached
version of some commit to seeing it on the branch.

What does a user expect? Personally I think it would be more readable to
see the extra entry. For example, this is from my current reflog:

  $ git log -g --oneline
  ...
  50d3062 HEAD@{23}: checkout: moving from jk/merge-one-file to 50d3062ab2cea4e999b8f3bafd211ff348bca600
  660fe6b HEAD@{24}: commit (amend): merge-one-file: fix broken merges with GIT_WORK_TREE
  ebad5e6 HEAD@{25}: commit (amend): merge-one-file: fix broken merges with GIT_WORK_TREE
  306f37e HEAD@{26}: rebase -i (pick): merge-one-file: fix broken merges with GIT_WORK_TREE
  0681894 HEAD@{27}: commit (amend): add tests for merge-index / merge-one-file
  77d4cba HEAD@{28}: cherry-pick
  50d3062 HEAD@{29}: checkout: moving from jk/merge-one-file to 50d3062ab2cea4e999b8f3bafd211ff348bca600
  ...

So reading in reverse order, I see that I started a rebase, which moved
us to a detached HEAD, then picked and amended some commits. And then
nothing, and suddenly I'm moving back from a branch to another detached
HEAD (I rebased again). It would be easier to follow if HEAD{23} were
actually:

  660fe6b HEAD{23}: rebase finished: returning to jk/merge-one-file

This feels a little nit-picky. I have to admit I don't try to follow
these sorts of reflogs all the time, so it's not like this is a pressing
issue. But when it comes to a user deciphering a broken state in their
repository, or trying to figure out which actions they took in a rebase
last week, the more entries we can give them, the better.

-Peff
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]