From: Junio C Hamano <gitster@pobox.com>
To: git@vger.kernel.org
Cc: "Christian Couder" <christian.couder@gmail.com>,
"SZEDER Gábor" <szeder@ira.uka.de>
Subject: BUG: "cherry-pick A..B || git reset --hard OTHER"
Date: Tue, 06 Dec 2016 10:58:42 -0800 [thread overview]
Message-ID: <xmqqlgvs28bh.fsf@gitster.mtv.corp.google.com> (raw)
I was burned a few times with this in the past few years, but it did
not irritate me often enough that I didn't write it down. But I
think this is serious enough that deserves attention from those who
were involved.
A short reproduction recipe, using objects from git.git that are
publicly available and stable, shows how bad it is.
$ git checkout v2.9.3^0
$ git cherry-pick 0582a34f52..a94bb68397
... see conflict, decide to give up backporting to
... such an old fork point.
... the git-prompt gives "|CHERRY-PICKING" correctly.
$ git reset --hard v2.10.2^0
... the git-prompt no longer says "|CHERRY-PICKING"
$ edit && git commit -m "prelim work for backporting"
[detached HEAD cc5a6a9219] prelim work for backporting
$ git cherry-pick 0582a34f52..a94bb68397
error: a cherry-pick or revert is already in progress
hint: try "git cherry-pick (--continue | --quit | --abort)"
fatal: cherry-pick failed
$ git cherry-pick --abort
... we come back to v2.9.3^0, losing the new commit!
The above shows two bugs.
(1) The third invocation of "cherry-pick" with "--abort" to get rid
of the state from the unfinished cherry-pick we did previously
is necessary, but the command does not notice that we resetted
to a new branch AND we even did some other work there. This
loses end-user's work.
"git cherry-pick --abort" should learn from "git am --abort"
that has an extra safety to deal with the above workflow. The
state from the unfinished "am" is removed, but the head is not
rewound to avoid losing end-user's work.
You can try by replacing two instances of
$ git cherry-pick 0582a34f52..a94bb68397
with
$ git format-patch --stdout 0582a34f52..a94bb68397 | git am
in the above sequence, and conclude with "git am--abort" to see
how much more pleasant and safe "git am --abort" is.
(2) The bug in "cherry-pick --abort" is made worse because the
git-completion script seems to be unaware of $GIT_DIR/sequencer
and stops saying "|CHERRY-PICKING" after the step to switch to
a different state with "git reset --hard v2.10.2^0". If the
prompt showed it after "git reset", the end user would have
thought twice before starting the "prelim work".
Thanks.
next reply other threads:[~2016-12-06 18:58 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-06 18:58 Junio C Hamano [this message]
2016-12-07 14:31 ` BUG: "cherry-pick A..B || git reset --hard OTHER" Christian Couder
2016-12-07 18:36 ` Stephan Beyer
2016-12-07 20:04 ` Junio C Hamano
2016-12-07 20:35 ` Stephan Beyer
2016-12-07 23:21 ` Duy Nguyen
2016-12-09 11:33 ` Duy Nguyen
2016-12-09 11:34 ` [PATCH] rebase: rename --forget to be consistent with sequencer Nguyễn Thái Ngọc Duy
2016-12-09 11:34 ` [PATCH] revert, cherry-pick: rename --quit to be consistent with rebase Nguyễn Thái Ngọc Duy
2016-12-09 18:07 ` BUG: "cherry-pick A..B || git reset --hard OTHER" Junio C Hamano
2016-12-09 19:24 ` Stephan Beyer
2016-12-09 19:28 ` Stephan Beyer
2016-12-10 11:00 ` Duy Nguyen
2016-12-10 21:23 ` Junio C Hamano
2016-12-08 7:50 ` Christian Couder
2016-12-07 21:51 ` [PATCH 1/5] am: Fix filename in safe_to_abort() error message Stephan Beyer
2016-12-08 10:21 ` Paul Tan
2016-12-07 21:51 ` [PATCH 2/5] am: Change safe_to_abort()'s not rewinding error into a warning Stephan Beyer
2016-12-07 21:51 ` [PATCH 3/5] Add test that cherry-pick --abort does not unsafely change HEAD Stephan Beyer
2016-12-07 21:51 ` [PATCH 4/5] Make sequencer abort safer Stephan Beyer
2016-12-08 15:28 ` Johannes Schindelin
2016-12-08 17:27 ` Junio C Hamano
2016-12-08 19:17 ` Stephan Beyer
2016-12-09 18:33 ` Junio C Hamano
2016-12-09 19:01 ` [PATCH v2 1/5] am: Fix filename in safe_to_abort() error message Stephan Beyer
2016-12-09 19:01 ` [PATCH v2 2/5] am: Change safe_to_abort()'s not rewinding error into a warning Stephan Beyer
2016-12-09 19:01 ` [PATCH v2 3/5] Add test that cherry-pick --abort does not unsafely change HEAD Stephan Beyer
2016-12-09 19:01 ` [PATCH v2 4/5] Make sequencer abort safer Stephan Beyer
2016-12-10 19:56 ` Christian Couder
2016-12-10 20:04 ` Jeff King
2016-12-10 20:20 ` Stephan Beyer
2016-12-09 19:01 ` [PATCH v2 5/5] sequencer: Remove useless get_dir() function Stephan Beyer
2016-12-07 21:51 ` [PATCH " Stephan Beyer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqlgvs28bh.fsf@gitster.mtv.corp.google.com \
--to=gitster@pobox.com \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=szeder@ira.uka.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.