From: Junio C Hamano <gitster@pobox.com>
To: "Simon A. Eugster" <simon.eu@gmail.com>
Cc: git@vger.kernel.org, "Simon A. Eugster" <simon.eugster@eps.ch>
Subject: Re: [PATCH] Documentation clarification on git-checkout regarding ours/theirs
Date: Fri, 10 Jul 2015 13:07:11 -0700 [thread overview]
Message-ID: <xmqqy4inkc9c.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <1436516877-21064-1-git-send-email-simon.eu@gmail.com> (Simon A. Eugster's message of "Fri, 10 Jul 2015 10:27:57 +0200")
"Simon A. Eugster" <simon.eu@gmail.com> writes:
> From: "Simon A. Eugster" <simon.eugster@eps.ch>
>
> Signed-off-by: Simon A. Eugster <simon.eugster@eps.ch>
> ---
For those who are looking from the sideline, this is a reroll from a
month-old thread $gmane/271680.
> Documentation/git-checkout.txt | 16 +++++++++++++++-
> 1 file changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkout.txt
> index d263a56..d69306f 100644
> --- a/Documentation/git-checkout.txt
> +++ b/Documentation/git-checkout.txt
> @@ -115,7 +115,21 @@ entries; instead, unmerged entries are ignored.
> --ours::
> --theirs::
> When checking out paths from the index, check out stage #2
> - ('ours') or #3 ('theirs') for unmerged paths.
> + ('ours', HEAD) or #3 ('theirs', MERGE_HEAD) for unmerged paths.
I'd drop the change on this line. Your conflict may or may not be
from these two places when you are using "checkout". Even if it
came from "git merge", when you are doing "merge", the roles 'ours'
and 'theirs' are very clear and mentioning HEAD/MERGE_HEAD does not
add more clarity than it clutters the description, I would think.
> + See linkgit:git-merge[1] for details about stages #2 and #3.
> ++
> +Note that during `git rebase` and `git pull --rebase`, 'theirs' checks out
> +the local version, and 'ours' the remote version or the history that is rebased
> +against.
> ++
> +The reason ours/theirs appear to be swapped during a rebase is that we
> +define the remote history as the canonical history, on top of which our
> +private commits are applied on, as opposed to normal merging where the
> +local history is the canonical one.
It appears to me that this patch text predates my comment in
$gmane/271720 and your response to it?
> +During merging, we assume the role of the canonical history’s keeper,
> +which, in case of a rebase, is the remote history, and our private commits
> +look to the keeper as “their” commits which need to be integrated on top
> +of “our” work.
>
> -b <new_branch>::
> Create a new branch named <new_branch> and start it at
Thanks for reminding of the discussion that did not conclude with a
patch.
How about this?
-- >8 --
From: "Simon A. Eugster" <simon.eugster@eps.ch>
Subject: checkout: document subtlety around --ours/--theirs
During a 'rebase' (hence 'pull --rebase'), --ours/--theirs may
appear to be swapped to those who are not aware of the fact that
they are temporarily playing the role of the keeper of the more
authoritative history.
Add a note to clarify.
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Simon A. Eugster <simon.eugster@eps.ch>
---
Documentation/git-checkout.txt | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkout.txt
index d263a565..8c921e7 100644
--- a/Documentation/git-checkout.txt
+++ b/Documentation/git-checkout.txt
@@ -116,6 +116,21 @@ entries; instead, unmerged entries are ignored.
--theirs::
When checking out paths from the index, check out stage #2
('ours') or #3 ('theirs') for unmerged paths.
++
+Note that during `git rebase` and `git pull --rebase`, 'ours' and
+'theirs' may appear swapped; `--ours` gives the version from the
+branch the changes are rebased onto, while `--theirs` gives the
+version from the branch that holds your work that is being rebased.
++
+This is because `rebase` is used in a workflow that treats the
+history at the remote as the shared canonical one, and treat the
+work done on the branch you are rebasing as the third-party work to
+be integrated, and you are temporarily assuming the role of the
+keeper of the canonical history during the rebase. As the keeper of
+the canonical history, you need to view the history from the remote
+as `ours` (i.e. "our shared canonical history"), while what you did
+on your side branch as `theirs` (i.e. "one contributor's work on top
+of it").
-b <new_branch>::
Create a new branch named <new_branch> and start it at
next prev parent reply other threads:[~2015-07-10 20:07 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-10 8:27 [PATCH] Documentation clarification on git-checkout regarding ours/theirs Simon A. Eugster
2015-07-10 20:07 ` Junio C Hamano [this message]
2015-07-11 5:26 ` Simon A. Eugster
2015-07-12 16:36 ` Junio C Hamano
-- strict thread matches above, loose matches on Subject: below --
2015-06-11 11:39 Simon A. Eugster
2015-06-11 15:37 ` Junio C Hamano
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=xmqqy4inkc9c.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=simon.eu@gmail.com \
--cc=simon.eugster@eps.ch \
/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.