From: Jonathan Nieder <jrnieder@gmail.com>
To: Christian Couder <chriscool@tuxfamily.org>
Cc: Junio C Hamano <gitster@pobox.com>,
git@vger.kernel.org,
Johannes Schindelin <Johannes.Schindelin@gmx.de>,
Sverre Rabbelier <srabbelier@gmail.com>,
Ramkumar Ramachandra <artagnon@gmail.com>
Subject: Re: [PATCH 7/8] Documentation/cherry-pick: describe passing more than one commit
Date: Tue, 1 Jun 2010 04:51:24 -0500 [thread overview]
Message-ID: <20100601095124.GA1033@progeny.tock> (raw)
In-Reply-To: <20100531194240.28729.50475.chriscool@tuxfamily.org>
Christian Couder wrote:
> --- a/Documentation/git-cherry-pick.txt
> +++ b/Documentation/git-cherry-pick.txt
> @@ -3,24 +3,29 @@ git-cherry-pick(1)
>
> NAME
> ----
> -git-cherry-pick - Apply the change introduced by an existing commit
> +git-cherry-pick - Apply the change introduced by some existing commits
Maybe s/change/changes/.
> DESCRIPTION
> -----------
> -Given one existing commit, apply the change the patch introduces, and record a
> -new commit that records it. This requires your working tree to be clean (no
> -modifications from the HEAD commit).
> +
> +Given one or more existing commits, apply the changes that the related
> +patches introduce, and record some new commits that record them. This
> +requires your working tree to be clean (no modifications from the HEAD
> +commit).
"Related" made me think "related how"? "Record some new commits"
sounds oddly vague.
Maybe:
Given one or more existing commits, apply the change each one
introduces, recording a new commit for each. This requires
your working tree to be clean (no modifications from the HEAD
commit).
> OPTIONS
> -------
> -<commit>::
> - Commit to cherry-pick.
> +<commit>...::
> + Commits to cherry-pick.
> For a more complete list of ways to spell commits, see the
> "SPECIFYING REVISIONS" section in linkgit:git-rev-parse[1].
> + Sets of commits can also be given but no traversal is done
> + by default, see linkgit:git-rev-list[1] and its '--no-walk'
> + option.
--no-walk can be a bit confusing. I think we should try to avoid
relying on the reader understanding it.
<commit>...::
Commits to cherry-pick.
For a more complete list of ways to spell commits, see the
"SPECIFYING REVISIONS" section in linkgit:git-rev-parse[1].
Revision ranges are interpreted as though specified with
the `--no-walk` option; see the "Examples" section below.
> -e::
> --edit::
> @@ -55,13 +60,12 @@ OPTIONS
>
> -n::
> --no-commit::
> - Usually the command automatically creates a commit.
> - This flag applies the change necessary to cherry-pick
> - the named commit to your working tree and the index,
> - but does not make the commit. In addition, when this
> - option is used, your index does not have to match the
> - HEAD commit. The cherry-pick is done against the
> - beginning state of your index.
> + Usually the command automatically creates some commits. This
> + flag applies the change necessary to cherry-pick the named
> + commits to your working tree and the index, but does not make
> + the commits. In addition, when this option is used, your
> + index does not have to match the HEAD commit. The cherry-pick
> + is done against the beginning state of your index.
This switches between singular and plural.
-n::
--no-commit::
Usually 'git cherry-pick' automatically creates a sequence
of commits. This option can be used to apply the changes
necessary to cherry-pick each named commit to your working
tree and index without making any commits. In addition,
when this option is used, your index does not have to match
the HEAD commit: the cherry-pick is done against the
beginning state of the index.
> +
> This is useful when cherry-picking more than one commits'
> effect to your index in a row.
This is useful for cherry-picking multiple commits
to produce a single new commit.
> @@ -75,6 +79,38 @@ effect to your index in a row.
> cherry-pick'ed commit, then a fast forward to this commit will
> be performed.
>
> +Examples
> +--------
These are a little repetitive.
> +git cherry-pick master::
> +
> + Apply the changes specified by the commit pointed to by master
> + and create a new commit with these changes.
git cherry-pick master::
Apply the change introduced by the commit at the tip of the
master branch and create a new commit.
> +
> +git cherry-pick master~3..master::
> +git cherry-pick ^master~3 master::
> +
> + Apply the changes specified by the last 3 commits pointed to
> + by master and create 3 new commits with these changes.
git cherry-pick ..master::
git cherry-pick ^HEAD master::
Apply the changes introduced by all commits that are ancestors
of master but not HEAD to produce new commits on the current
branch.
> +git cherry-pick master\~3 master~2::
> +
> + Apply the changes specified by the fourth and third last
> + commits pointed to by master and create 2 new commits with
> + these changes.
git cherry-pick master~5 master~2::
Apply the changes introduced by the fifth- and second-generation
grandparents of master to HEAD as new commits.
> +
> +git cherry-pick -n master~1 next::
> +
> + Apply to the working tree and the index the changes specified
> + by the second last commit pointed to by master and by the last
> + commit pointed to by next, but do not create any commit with
> + these changes.
git rev-list master -- README | git cherry-pick -n --stdin::
Apply the changes introduced by all commits on the master
branch that touched README to the working tree and index,
so the result can be inspected and made into a single new
commit if suitable.
> +
> +git cherry-pick --ff ..next::
> +
> + If possible fast forward to the existing commits already in
> + next but not in HEAD, otherwise apply the changes specified by
> + these commits and create new commits with these changes.
git cherry-pick --ff ..next::
If history is linear and HEAD is an ancestor of next, update
the working tree and advance the HEAD pointer to match next.
Otherwise, apply the changes introduced by those commits that
are in next but not HEAD to the current branch, creating a new
commit for each new change.
(This is not precisely right, since it doesn’t describe the behavior
in some cases of nonlinear history:
. --- . --- . --- . ---. next
/ /
. HEAD .---.
In this case, assuming time flows left-to-right, the HEAD would
fast-forward three commits, then cherry-pick the other three. Not
sure how to word this nicely.)
Hope that helps,
Jonathan
next prev parent reply other threads:[~2010-06-01 9:51 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-31 19:42 [PATCH 0/8] implement cherry-picking many commits Christian Couder
2010-05-31 19:42 ` [PATCH 1/8] revert: cleanup code for -x option Christian Couder
2010-05-31 19:42 ` [PATCH 2/8] revert: use run_command_v_opt() instead of execv_git_cmd() Christian Couder
2010-06-01 4:01 ` Jonathan Nieder
2010-06-01 4:33 ` Christian Couder
2010-05-31 19:42 ` [PATCH 3/8] revert: refactor code into a do_pick_commit() function Christian Couder
2010-05-31 19:42 ` [PATCH 4/8] revert: change help_msg() to take no argument Christian Couder
2010-06-01 5:08 ` Jonathan Nieder
2010-06-01 5:40 ` Jeff King
2010-06-01 6:27 ` Jonathan Nieder
2010-05-31 19:42 ` [PATCH 5/8] revert: allow cherry-picking more than one commit Christian Couder
2010-06-01 7:38 ` Sverre Rabbelier
2010-06-01 8:35 ` Jonathan Nieder
2010-06-02 23:37 ` Junio C Hamano
2010-06-03 4:18 ` Christian Couder
2010-06-01 9:03 ` Jonathan Nieder
2010-06-02 5:57 ` Christian Couder
2010-05-31 19:42 ` [PATCH 6/8] revert: add tests to check cherry-picking many commits Christian Couder
2010-05-31 19:42 ` [PATCH 7/8] Documentation/cherry-pick: describe passing more than one commit Christian Couder
2010-06-01 9:29 ` Ramkumar Ramachandra
2010-06-02 5:57 ` Christian Couder
2010-06-01 9:51 ` Jonathan Nieder [this message]
2010-06-01 10:26 ` Ramkumar Ramachandra
2010-06-02 5:57 ` Christian Couder
2010-06-02 5:57 ` Christian Couder
2010-06-02 6:14 ` Jonathan Nieder
2010-06-14 3:33 ` Christian Couder
2010-05-31 19:42 ` [PATCH 8/8] Documentation/revert: " Christian Couder
2010-06-01 13:28 ` Antriksh Pany
2010-06-02 5:57 ` Christian Couder
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=20100601095124.GA1033@progeny.tock \
--to=jrnieder@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=artagnon@gmail.com \
--cc=chriscool@tuxfamily.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=srabbelier@gmail.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).