{"thread":{"id":"34096","subject":"[PATCH 0/3] Fix git checkout - (early preview)","startedAt":"2013-06-10T16:22:09Z","lastAt":"2013-06-13T17:05:27Z","messageCount":12,"participants":["Ramkumar Ramachandra","Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":3},"messages":[{"id":"220313","messageId":"1370881332-9231-1-git-send-email-artagnon@gmail.com","threadId":"34096","inReplyTo":null,"subject":"[PATCH 0/3] Fix git checkout - (early preview)","fromName":"Ramkumar Ramachandra","fromEmail":"artagnon@gmail.com","sentAt":"2013-06-10T16:22:09Z","receivedAt":"2013-06-10T16:22:09Z","isPatch":true,"sender":{"key":"r@artagnon.com","avatar":"https://avatars.githubusercontent.com/u/37226?v=4"},"body":"Hi,\n\nSo, this 'git checkout -' not working after a 'rebase -i' has annoyed\nme to no end.  This is the fix.\n\nUnfortunately, some tests fail and I'm still tracking down what\nexactly is going on.\n\nThanks.\n\nRamkumar Ramachandra (3):\n  t/checkout-last: checkout - doesn't work after rebase -i\n  checkout: respect GIT_REFLOG_ACTION\n  rebase -i: write better reflog messages for start\n\n builtin/checkout.c         | 11 ++++++++---\n git-rebase--interactive.sh |  2 ++\n t/t2012-checkout-last.sh   |  8 ++++++++\n 3 files changed, 18 insertions(+), 3 deletions(-)\n\n-- \n1.8.3.254.g60f9e5b\n"},{"id":"220315","messageId":"1370881332-9231-2-git-send-email-artagnon@gmail.com","threadId":"34096","inReplyTo":"1370881332-9231-1-git-send-email-artagnon@gmail.com","subject":"[PATCH 1/3] t/checkout-last: checkout - doesn't work after rebase -i","fromName":"Ramkumar Ramachandra","fromEmail":"artagnon@gmail.com","sentAt":"2013-06-10T16:22:10Z","receivedAt":"2013-06-10T16:22:10Z","isPatch":true,"sender":{"key":"r@artagnon.com","avatar":"https://avatars.githubusercontent.com/u/37226?v=4"},"body":"The following command\n\n  $ git checkout -\n\ndoes not work as expected after a 'git rebase -i'.\n\nAdd a failing test documenting this bug.\n\nSigned-off-by: Ramkumar Ramachandra <artagnon@gmail.com>\n---\n t/t2012-checkout-last.sh | 8 ++++++++\n 1 file changed, 8 insertions(+)\n\ndiff --git a/t/t2012-checkout-last.sh b/t/t2012-checkout-last.sh\nindex b44de9d..5729487 100755\n--- a/t/t2012-checkout-last.sh\n+++ b/t/t2012-checkout-last.sh\n@@ -116,4 +116,12 @@ test_expect_success 'master...' '\n \ttest \"z$(git rev-parse --verify HEAD)\" = \"z$(git rev-parse --verify master^)\"\n '\n \n+test_expect_failure '\"checkout -\" works after an interactive rebase' '\n+\tgit checkout master &&\n+\tgit checkout other &&\n+\tgit rebase -i master &&\n+\tgit checkout - &&\n+\ttest \"z$(git symbolic-ref HEAD)\" = \"zrefs/heads/master\"\n+'\n+\n test_done\n-- \n1.8.3.254.g60f9e5b\n"},{"id":"220314","messageId":"1370881332-9231-3-git-send-email-artagnon@gmail.com","threadId":"34096","inReplyTo":"1370881332-9231-1-git-send-email-artagnon@gmail.com","subject":"[PATCH 2/3] checkout: respect GIT_REFLOG_ACTION","fromName":"Ramkumar Ramachandra","fromEmail":"artagnon@gmail.com","sentAt":"2013-06-10T16:22:11Z","receivedAt":"2013-06-10T16:22:11Z","isPatch":true,"sender":{"key":"r@artagnon.com","avatar":"https://avatars.githubusercontent.com/u/37226?v=4"},"body":"GIT_REFLOG_ACTION is an environment variable specifying the reflog\nmessage to write after an action is completed.  Other commands including\nmerge, reset, and commit respect it.\n\nThis incidentally fixes a bug in t/checkout-last.  You can now expect\n\n  $ git checkout -\n\nto work fine after an interactive rebase.\n\nSigned-off-by: Ramkumar Ramachandra <artagnon@gmail.com>\n---\n builtin/checkout.c       | 11 ++++++++---\n t/t2012-checkout-last.sh |  2 +-\n 2 files changed, 9 insertions(+), 4 deletions(-)\n\ndiff --git a/builtin/checkout.c b/builtin/checkout.c\nindex f5b50e5..1e2af85 100644\n--- a/builtin/checkout.c\n+++ b/builtin/checkout.c\n@@ -587,7 +587,7 @@ static void update_refs_for_switch(const struct checkout_opts *opts,\n \t\t\t\t   struct branch_info *new)\n {\n \tstruct strbuf msg = STRBUF_INIT;\n-\tconst char *old_desc;\n+\tconst char *old_desc, *reflog_msg;\n \tif (opts->new_branch) {\n \t\tif (opts->new_orphan_branch) {\n \t\t\tif (opts->new_branch_log && !log_all_ref_updates) {\n@@ -620,8 +620,13 @@ static void update_refs_for_switch(const struct checkout_opts *opts,\n \told_desc = old->name;\n \tif (!old_desc && old->commit)\n \t\told_desc = sha1_to_hex(old->commit->object.sha1);\n-\tstrbuf_addf(&msg, \"checkout: moving from %s to %s\",\n-\t\t    old_desc ? old_desc : \"(invalid)\", new->name);\n+\n+\treflog_msg = getenv(\"GIT_REFLOG_ACTION\");\n+\tif (!reflog_msg)\n+\t\tstrbuf_addf(&msg, \"checkout: moving from %s to %s\",\n+\t\t\told_desc ? old_desc : \"(invalid)\", new->name);\n+\telse\n+\t\tstrbuf_insert(&msg, 0, reflog_msg, strlen(reflog_msg));\n \n \tif (!strcmp(new->name, \"HEAD\") && !new->path && !opts->force_detach) {\n \t\t/* Nothing to do. */\ndiff --git a/t/t2012-checkout-last.sh b/t/t2012-checkout-last.sh\nindex 5729487..ab80da7 100755\n--- a/t/t2012-checkout-last.sh\n+++ b/t/t2012-checkout-last.sh\n@@ -116,7 +116,7 @@ test_expect_success 'master...' '\n \ttest \"z$(git rev-parse --verify HEAD)\" = \"z$(git rev-parse --verify master^)\"\n '\n \n-test_expect_failure '\"checkout -\" works after an interactive rebase' '\n+test_expect_success '\"checkout -\" works after an interactive rebase' '\n \tgit checkout master &&\n \tgit checkout other &&\n \tgit rebase -i master &&\n-- \n1.8.3.254.g60f9e5b\n"},{"id":"220316","messageId":"1370881332-9231-4-git-send-email-artagnon@gmail.com","threadId":"34096","inReplyTo":"1370881332-9231-1-git-send-email-artagnon@gmail.com","subject":"[PATCH 3/3] rebase -i: write better reflog messages for start","fromName":"Ramkumar Ramachandra","fromEmail":"artagnon@gmail.com","sentAt":"2013-06-10T16:22:12Z","receivedAt":"2013-06-10T16:22:12Z","isPatch":true,"sender":{"key":"r@artagnon.com","avatar":"https://avatars.githubusercontent.com/u/37226?v=4"},"body":"Invoking 'git rebase -i' writes the following line to the reflog at the\nstart of the operation:\n\n  rebase -i (start)\n\nThis is not very useful.  Make it more informative like:\n\n  rebase -i (start): checkout master\n\nSigned-off-by: Ramkumar Ramachandra <artagnon@gmail.com>\n---\n git-rebase--interactive.sh | 2 ++\n 1 file changed, 2 insertions(+)\n\ndiff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh\nindex 5822b2c..a05a6e4 100644\n--- a/git-rebase--interactive.sh\n+++ b/git-rebase--interactive.sh\n@@ -837,6 +837,7 @@ comment_for_reflog start\n \n if test ! -z \"$switch_to\"\n then\n+\tGIT_REFLOG_ACTION=\"$GIT_REFLOG_ACTION: checkout $switch_to\"\n \toutput git checkout \"$switch_to\" -- ||\n \t\tdie \"Could not checkout $switch_to\"\n fi\n@@ -980,6 +981,7 @@ has_action \"$todo\" ||\n \n test -d \"$rewritten\" || test -n \"$force_rebase\" || skip_unnecessary_picks\n \n+GIT_REFLOG_ACTION=\"$GIT_REFLOG_ACTION: checkout $onto_name\"\n output git checkout $onto || die_abort \"could not detach HEAD\"\n git update-ref ORIG_HEAD $orig_head\n do_rest\n-- \n1.8.3.254.g60f9e5b\n"},{"id":"220341","messageId":"7vhah5izv4.fsf@alter.siamese.dyndns.org","threadId":"34096","inReplyTo":"1370881332-9231-2-git-send-email-artagnon@gmail.com","subject":"Re: [PATCH 1/3] t/checkout-last: checkout - doesn't work after rebase -i","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-06-10T18:29:03Z","receivedAt":"2013-06-10T18:29:03Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Ramkumar Ramachandra <artagnon@gmail.com> writes:\n\n> The following command\n>\n>   $ git checkout -\n>\n> does not work as expected after a 'git rebase -i'.\n>\n> Add a failing test documenting this bug.\n>\n> Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>\n> ---\n>  t/t2012-checkout-last.sh | 8 ++++++++\n>  1 file changed, 8 insertions(+)\n>\n> diff --git a/t/t2012-checkout-last.sh b/t/t2012-checkout-last.sh\n> index b44de9d..5729487 100755\n> --- a/t/t2012-checkout-last.sh\n> +++ b/t/t2012-checkout-last.sh\n> @@ -116,4 +116,12 @@ test_expect_success 'master...' '\n>  \ttest \"z$(git rev-parse --verify HEAD)\" = \"z$(git rev-parse --verify master^)\"\n>  '\n>  \n> +test_expect_failure '\"checkout -\" works after an interactive rebase' '\n> +\tgit checkout master &&\n> +\tgit checkout other &&\n> +\tgit rebase -i master &&\n> +\tgit checkout - &&\n> +\ttest \"z$(git symbolic-ref HEAD)\" = \"zrefs/heads/master\"\n> +'\n\nHmph, you were on \"other\" and then ran \"rebase -i\" to rebase it.\nWhen you are done, you are on \"other\".  You want to go back to the\none before you checked out the branch you started your \"rebase -i\"\non, which is \"master\".\n\nOK, the expectation makes sense to me.\n\nThese four are all valid ways to spell the \"rebase -i master\" step.\n\n\tgit rebase -i master\n        git rebase -i --onto master master\n        git rebase -i master other\n        git rebase -i --onto master master other\n\nand I think it is sensible to expect\n\n (1) they all behave the same way; or\n\n (2) the first two behave the same, but the latter two explicitly\n     checks out 'other' by giving the last argument.  If you are not\n     on 'other' when you run the \"rebase -i\", \"checkout -\" should\n     come back to the branch before 'other', i.e. the branch you\n     started your \"rebase -i\" on.\n\nIn other words, (2) would mean:\n\n\tgit checkout master &&\n        git checkout -b naster &&\n        git rebase -i master other &&\n\t# ends up on other\n        test_string_equal \"$(git symbolic-ref HEAD)\" refs/heads/other &&\n        git checkout - &&\n\t# we were on naster before we rebased 'other'\n        test_string_equal \"$(git symbolic-ref HEAD)\" refs/heads/naster\n\nIt is a bit unclear what the following should expect.\n\n\tgit checkout master &&\n        git checkout other &&\n        git rebase -i master other &&\n\t# ends up on other\n        test_string_equal \"$(git symbolic-ref HEAD)\" refs/heads/other &&\n        git checkout - &&\n\t# we are on ??? before we rebased other\n        test_string_equal \"$(git symbolic-ref HEAD)\" refs/heads/???\n\nOne could argue that the \"first checkout other and then rebase\" done\nby rebase becomes a no-op and the user should be aware of that\nbecause rebase is started while on that other branch, in which case\nwe should come back to 'master'.  From consistency point of view,\none could instead argue that we were on 'other' before we rebased\nit, in which case it may not be unreasonable for \"checkout -\" to\ncome back to 'other'.  I tend to prefer the former (i.e. go back to\n'master') over the latter but not by a large margin.\n"},{"id":"220343","messageId":"7vd2rtizrf.fsf@alter.siamese.dyndns.org","threadId":"34096","inReplyTo":"1370881332-9231-3-git-send-email-artagnon@gmail.com","subject":"Re: [PATCH 2/3] checkout: respect GIT_REFLOG_ACTION","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-06-10T18:31:16Z","receivedAt":"2013-06-10T18:31:16Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Ramkumar Ramachandra <artagnon@gmail.com> writes:\n\n> GIT_REFLOG_ACTION is an environment variable specifying the reflog\n> message to write after an action is completed.  Other commands including\n> merge, reset, and commit respect it.\n>\n> This incidentally fixes a bug in t/checkout-last.  You can now expect\n>\n>   $ git checkout -\n>\n> to work fine after an interactive rebase.\n>\n> Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>\n> ---\n>  builtin/checkout.c       | 11 ++++++++---\n>  t/t2012-checkout-last.sh |  2 +-\n>  2 files changed, 9 insertions(+), 4 deletions(-)\n>\n> diff --git a/builtin/checkout.c b/builtin/checkout.c\n> index f5b50e5..1e2af85 100644\n> --- a/builtin/checkout.c\n> +++ b/builtin/checkout.c\n> @@ -587,7 +587,7 @@ static void update_refs_for_switch(const struct checkout_opts *opts,\n>  \t\t\t\t   struct branch_info *new)\n>  {\n>  \tstruct strbuf msg = STRBUF_INIT;\n> -\tconst char *old_desc;\n> +\tconst char *old_desc, *reflog_msg;\n>  \tif (opts->new_branch) {\n>  \t\tif (opts->new_orphan_branch) {\n>  \t\t\tif (opts->new_branch_log && !log_all_ref_updates) {\n> @@ -620,8 +620,13 @@ static void update_refs_for_switch(const struct checkout_opts *opts,\n>  \told_desc = old->name;\n>  \tif (!old_desc && old->commit)\n>  \t\told_desc = sha1_to_hex(old->commit->object.sha1);\n> -\tstrbuf_addf(&msg, \"checkout: moving from %s to %s\",\n> -\t\t    old_desc ? old_desc : \"(invalid)\", new->name);\n> +\n> +\treflog_msg = getenv(\"GIT_REFLOG_ACTION\");\n> +\tif (!reflog_msg)\n> +\t\tstrbuf_addf(&msg, \"checkout: moving from %s to %s\",\n> +\t\t\told_desc ? old_desc : \"(invalid)\", new->name);\n> +\telse\n> +\t\tstrbuf_insert(&msg, 0, reflog_msg, strlen(reflog_msg));\n\nLooks very sensible; we may need to audit programs that set and\nexport REFLOG_ACTION to make sure they do not do so incorrectly,\nwhich wouldn't have mattered if they called \"checkout\" but now it\nwould with this fix, though.\n\n\n\n>  \tif (!strcmp(new->name, \"HEAD\") && !new->path && !opts->force_detach) {\n>  \t\t/* Nothing to do. */\n> diff --git a/t/t2012-checkout-last.sh b/t/t2012-checkout-last.sh\n> index 5729487..ab80da7 100755\n> --- a/t/t2012-checkout-last.sh\n> +++ b/t/t2012-checkout-last.sh\n> @@ -116,7 +116,7 @@ test_expect_success 'master...' '\n>  \ttest \"z$(git rev-parse --verify HEAD)\" = \"z$(git rev-parse --verify master^)\"\n>  '\n>  \n> -test_expect_failure '\"checkout -\" works after an interactive rebase' '\n> +test_expect_success '\"checkout -\" works after an interactive rebase' '\n>  \tgit checkout master &&\n>  \tgit checkout other &&\n>  \tgit rebase -i master &&\n"},{"id":"220344","messageId":"7v8v2hizpc.fsf@alter.siamese.dyndns.org","threadId":"34096","inReplyTo":"1370881332-9231-4-git-send-email-artagnon@gmail.com","subject":"Re: [PATCH 3/3] rebase -i: write better reflog messages for start","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-06-10T18:32:31Z","receivedAt":"2013-06-10T18:32:31Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Ramkumar Ramachandra <artagnon@gmail.com> writes:\n\n> Invoking 'git rebase -i' writes the following line to the reflog at the\n> start of the operation:\n>\n>   rebase -i (start)\n>\n> This is not very useful.  Make it more informative like:\n>\n>   rebase -i (start): checkout master\n\nMakes sense to me, at least within the scope of the patch context.\n\nI am curious what breaks, though.\n\n> Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>\n> ---\n>  git-rebase--interactive.sh | 2 ++\n>  1 file changed, 2 insertions(+)\n>\n> diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh\n> index 5822b2c..a05a6e4 100644\n> --- a/git-rebase--interactive.sh\n> +++ b/git-rebase--interactive.sh\n> @@ -837,6 +837,7 @@ comment_for_reflog start\n>  \n>  if test ! -z \"$switch_to\"\n>  then\n> +\tGIT_REFLOG_ACTION=\"$GIT_REFLOG_ACTION: checkout $switch_to\"\n>  \toutput git checkout \"$switch_to\" -- ||\n>  \t\tdie \"Could not checkout $switch_to\"\n>  fi\n> @@ -980,6 +981,7 @@ has_action \"$todo\" ||\n>  \n>  test -d \"$rewritten\" || test -n \"$force_rebase\" || skip_unnecessary_picks\n>  \n> +GIT_REFLOG_ACTION=\"$GIT_REFLOG_ACTION: checkout $onto_name\"\n>  output git checkout $onto || die_abort \"could not detach HEAD\"\n>  git update-ref ORIG_HEAD $orig_head\n>  do_rest\n"},{"id":"220353","messageId":"CALkWK0mmSKDH2vrz4a8Qb8=++NSAp2x5mCUEuLpPo9HLfmgFLw@mail.gmail.com","threadId":"34096","inReplyTo":"7v8v2hizpc.fsf@alter.siamese.dyndns.org","subject":"Re: [PATCH 3/3] rebase -i: write better reflog messages for start","fromName":"Ramkumar Ramachandra","fromEmail":"artagnon@gmail.com","sentAt":"2013-06-10T18:36:14Z","receivedAt":"2013-06-10T18:36:14Z","isPatch":true,"sender":{"key":"r@artagnon.com","avatar":"https://avatars.githubusercontent.com/u/37226?v=4"},"body":"Junio C Hamano wrote:\n> I am curious what breaks, though.\n\nt/status-help.  Looks seriously unrelated, and I'm breaking my head\nover it.  Any clues?\n\n--- expected    2013-06-10 17:16:42.276356867 +0000\n+++ actual      2013-06-10 17:16:42.279690201 +0000\n@@ -1,4 +1,4 @@\n-# HEAD detached at 000106f\n+# HEAD detached from 88a81b6\n # You are currently rebasing branch 'rebase_conflicts' on '000106f'.\n #   (fix conflicts and then run \"git rebase --continue\")\n #   (use \"git rebase --skip\" to skip this patch)\nnot ok 5 - status when rebase in progress before resolving conflicts\n"},{"id":"220696","messageId":"CALkWK0=zJP2uYtd2T-Xt26d5XqJBbKkBqLf08G0sAmda_F9Mog@mail.gmail.com","threadId":"34096","inReplyTo":"7vhah5izv4.fsf@alter.siamese.dyndns.org","subject":"Re: [PATCH 1/3] t/checkout-last: checkout - doesn't work after rebase -i","fromName":"Ramkumar Ramachandra","fromEmail":"artagnon@gmail.com","sentAt":"2013-06-13T07:13:31Z","receivedAt":"2013-06-13T07:13:31Z","isPatch":true,"sender":{"key":"r@artagnon.com","avatar":"https://avatars.githubusercontent.com/u/37226?v=4"},"body":"Junio C Hamano wrote:\n> These four are all valid ways to spell the \"rebase -i master\" step.\n>\n> and I think it is sensible to expect\n>\n>  (1) they all behave the same way; or\n\nYes.  My reasoning is very simple: a rebase is a rebase; it should not\nwrite \"checkout: \" messages to the reflog.  Therefore, the @{-<N>}\nwill ignore it; for the purposes of checkout -, the rebase event is\ninconsequential.\n"},{"id":"220711","messageId":"CALkWK0=o0OxTjim=+qoBhpHkWQoVWLWjkJPqknPbr29T5ax46Q@mail.gmail.com","threadId":"34096","inReplyTo":"CALkWK0mmSKDH2vrz4a8Qb8=++NSAp2x5mCUEuLpPo9HLfmgFLw@mail.gmail.com","subject":"Re: [PATCH 3/3] rebase -i: write better reflog messages for start","fromName":"Ramkumar Ramachandra","fromEmail":"artagnon@gmail.com","sentAt":"2013-06-13T10:32:54Z","receivedAt":"2013-06-13T10:32:54Z","isPatch":true,"sender":{"key":"r@artagnon.com","avatar":"https://avatars.githubusercontent.com/u/37226?v=4"},"body":"Ramkumar Ramachandra wrote:\n> t/status-help.  Looks seriously unrelated, and I'm breaking my head\n> over it.  Any clues?\n\nDamn it!  A recent commit is responsible for this avalanche in test\nbreakages: b397ea (status: show more info than \"currently not on any\nbranch\", 2013-03-13).  It re-implements a backward version of\ngrab_nth_branch_switch(): grab_1st_switch() essentially _relies_ on\nthe random unintended pollution that rebase writes to the reflog to\nprint a more useful (?) status :/\n\nI have no choice but to completely redo this bit, and update all the\ntests.  Let me know if there is some easy way to work around this that\nI'm missing.\n\nThanks.\n"},{"id":"220740","messageId":"7va9muvtkj.fsf@alter.siamese.dyndns.org","threadId":"34096","inReplyTo":"CALkWK0=o0OxTjim=+qoBhpHkWQoVWLWjkJPqknPbr29T5ax46Q@mail.gmail.com","subject":"Re: [PATCH 3/3] rebase -i: write better reflog messages for start","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-06-13T16:55:40Z","receivedAt":"2013-06-13T16:55:40Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Ramkumar Ramachandra <artagnon@gmail.com> writes:\n\n> Ramkumar Ramachandra wrote:\n>> t/status-help.  Looks seriously unrelated, and I'm breaking my head\n>> over it.  Any clues?\n>\n> Damn it!  A recent commit is responsible for this avalanche in test\n> breakages: b397ea (status: show more info than \"currently not on any\n> branch\", 2013-03-13).  It re-implements a backward version of\n> grab_nth_branch_switch(): grab_1st_switch() essentially _relies_ on\n> the random unintended pollution that rebase writes to the reflog to\n> print a more useful (?) status :/\n\nAfter \"git checkout v1.3.0\", it is reasonable to expect that you can\ntell what you checked out and what state you are in.  If you then\nmade a few commits or resetted to some other commit, it is debatable\nif \"detached from v1.3.0\" is useful or the subtle difference between\n\"detached at\" vs \"detached from\" is confusing.\n\nBut what does it have to do with rebase polluting the reflog?\n"},{"id":"220741","messageId":"CALkWK0=hTYEq8w=jfMN_Zp1-vSGj7h=yx=nfB9_hRETLsnrknQ@mail.gmail.com","threadId":"34096","inReplyTo":"7va9muvtkj.fsf@alter.siamese.dyndns.org","subject":"Re: [PATCH 3/3] rebase -i: write better reflog messages for start","fromName":"Ramkumar Ramachandra","fromEmail":"artagnon@gmail.com","sentAt":"2013-06-13T17:05:27Z","receivedAt":"2013-06-13T17:05:27Z","isPatch":true,"sender":{"key":"r@artagnon.com","avatar":"https://avatars.githubusercontent.com/u/37226?v=4"},"body":"Junio C Hamano wrote:\n> But what does it have to do with rebase polluting the reflog?\n\nSee the series I just posted.\n"}]}