From: "Julia Evans" <julia@jvns.ca>
To: "Junio C Hamano" <gitster@pobox.com>
Cc: "Patrick Steinhardt" <ps@pks.im>,
"Julia Evans" <gitgitgadget@gmail.com>,
git@vger.kernel.org
Subject: Re: [PATCH 1/7] [doc] Add new gitmergeconflicts man page
Date: Mon, 05 Oct 2026 15:11:21 -0400 [thread overview]
Message-ID: <e2ef9cf9-a87b-4374-bedd-8f7ab1114961@app.fastmail.com> (raw)
In-Reply-To: <xmqqik3gjc5j.fsf@gitster.g>
>> During a rebase, it can seem "upside down" because the "ours" commit is
>> from the branch you're rebasing on (for instance `main` in `git rebase
>> main`).
>>
>> These terms in Git all mean the same thing when dealing with a merge
>> conflict:
>>
>> * "common ancestor" and "base". The files from this commit are "in stage 1".
>> * "ours", "us", and `HEAD`. The files from this commit are "in stage 2".
>> * "theirs", "them". The files from this commit are "in stage 3".
>>
>> If you're confused about what something like "deleted by us" means, it's
>> often easiest to use some of the tools from
>> <<tools,TOOLS FOR HANDLING MERGE CONFLICTS>> above to get more context.
>> Finding the commit that deleted the file and seeing why is usually more
>> helpful than trying to abstractly reason through what "us" means.
>
> May I ask what is in scope for this effort?
>
> We previously discussed updating the conflict markers (the 'HEAD'
> and 'add-fruit' labels in the example above). Doing so would
> require code changes, which goes beyond mere documentation updates.
> But if a minor code change like that makes the documentation much
> easier to understand, I think we should consider doing so.
>
> Along the same line, if git status stopped saying "deleted by us"
> and instead used a different phrase, would that help reduce the
> "upside down" confusion [*]? Is it acceptable to bend the code
> a little if it helps the documentation?
I agree that would make sense. I have some changes to advice
(on other areas) in local branches on my machine already :)
I think of it as sort of "documentation driven development" (write the
documentation, and if it feels upsetting what the documentation is
saying, then try to change the code so we're happier with the docs!)
I don't have a clear idea for how to improve the way `git status`
presents merge conflicts to make it less confusing right now though.
Brainstorming a bit, here's some commentary on this `git status` output:
On branch main
Your branch and 'origin/main' have diverged,
and have 2 and 1 different commits each, respectively.
(use "git pull" if you want to integrate the remote branch with yours)
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: fruits.py
no changes added to commit (use "git add" and/or "git commit -a")
1. `(use "git pull" if you want to integrate the remote branch with yours)`
is not helpful advice here, it's not even allowed to run `git pull`
in the middle of a merge conflict.
2. `git add` is sort of not helpful here, all of the unmerged files currently
have conflict markers, so the next step is definitely not to run `git add`,
it's to edit one of the unmerged files. But perhaps it's unrealistic to
be running the equivalent of `git diff --check` in `git status` just to
help users out.
3. Not sure if "unmerged" is the best term here, maybe "conflicted"?
4. It gives the advice to use `git add` twice which is weird.
5. One part of the advice refers to the process of fixing conflicts as
"fix conflicts" but the other part calls it "mark resolution". Should
probably be consistent there.
But as you can see those comments are all over the place, some of them
are just wording changes, some of them would involve adding a bunch of
conditional logic to the advice system that might not be realistic,
I don't know.
> [Footnote]
>
> * I suspect that the "upside down" feeling is not really about the
> terms "ours" and "theirs" themselves. Rather, it comes from how
> one conceptualizes what 'rebase' does compared to 'merge'.
> During a rebase, we temporarily pretend that we are working on
> the upstream branch and replay our local changes on top of it.
> Once the user adopts this mindset, displaying the upstream state
> first (the point from which we start building the consolidated
> history) followed by the local state (what was done differently
> by the local side) becomes consistent with how 'merge' displays
> conflicts (where we start from our local state and merge the
> incoming changes).
I will say that I know all of these facts but it has never helped
me to remember "ours" and "theirs" :). I'm pretty resistant in general
to telling people they need to adopt the "right mindset", IMO
it's normal for people to have different points of view.
When explaining Git I heard a lot of "yes I know all that but I just
don't like to think about it that way" and it really helped me
to learn to respect when folks said that and try to see it from
their point of view.
next prev parent reply other threads:[~2026-10-05 19:11 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-24 14:44 [PATCH 0/7] [doc] Add new page on merge conflicts Julia Evans via GitGitGadget
2026-09-24 14:44 ` [PATCH 1/7] [doc] Add new gitmergeconflicts man page Julia Evans via GitGitGadget
2026-09-24 20:36 ` Junio C Hamano
2026-09-24 22:04 ` Junio C Hamano
2026-09-30 13:19 ` Patrick Steinhardt
2026-09-30 19:53 ` Julia Evans
2026-09-30 20:37 ` Junio C Hamano
2026-10-01 5:14 ` Patrick Steinhardt
2026-10-01 12:10 ` Julia Evans
2026-10-02 17:58 ` Junio C Hamano
2026-10-05 16:54 ` Julia Evans
2026-10-05 17:22 ` Junio C Hamano
2026-10-05 19:11 ` Julia Evans [this message]
2026-09-24 14:44 ` [PATCH 2/7] [doc] git-merge: link to new merge conflicts guide Julia Evans via GitGitGadget
2026-09-25 16:36 ` D. Ben Knoble
2026-09-25 16:59 ` Julia Evans
2026-09-25 18:19 ` Junio C Hamano
2026-09-25 19:32 ` Ben Knoble
2026-09-25 21:49 ` Junio C Hamano
2026-09-25 19:34 ` Ben Knoble
2026-10-02 17:01 ` Julia Evans
2026-10-02 17:50 ` Junio C Hamano
2026-10-02 18:53 ` Julia Evans
2026-10-02 21:38 ` Junio C Hamano
2026-10-03 2:25 ` D. Ben Knoble
2026-10-03 4:12 ` Junio C Hamano
2026-09-30 13:19 ` Patrick Steinhardt
2026-09-24 14:44 ` [PATCH 3/7] [doc] git-rebase: " Julia Evans via GitGitGadget
2026-09-24 14:44 ` [PATCH 4/7] [doc] git-revert: " Julia Evans via GitGitGadget
2026-09-24 14:44 ` [PATCH 5/7] [doc] git-cherry-pick: " Julia Evans via GitGitGadget
2026-09-25 17:17 ` Junio C Hamano
2026-09-28 20:58 ` Julia Evans
2026-09-28 21:25 ` Junio C Hamano
2026-09-24 14:44 ` [PATCH 6/7] [doc] git-pull: " Julia Evans via GitGitGadget
2026-09-24 14:44 ` [PATCH 7/7] [doc] ignore conflict markers in gitmergeconflicts.adoc Julia Evans via GitGitGadget
2026-10-07 21:21 ` Junio C Hamano
2026-10-09 12:06 ` Julia Evans
2026-09-24 22:20 ` [PATCH 0/7] [doc] Add new page on merge conflicts Junio C Hamano
2026-09-24 23:37 ` Jeff King
2026-09-28 20:41 ` Julia Evans
2026-09-29 1:32 ` Jeff King
2026-09-29 1:56 ` Junio C Hamano
2026-09-25 16:25 ` D. Ben Knoble
2026-10-02 17:39 ` Julia Evans
2026-10-03 2:29 ` D. Ben Knoble
2026-10-05 18:49 ` Julia Evans
2026-10-06 16:53 ` D. Ben Knoble
2026-10-06 17:09 ` D. Ben Knoble
2026-10-09 12:00 ` [PATCH v2 0/6] " Julia Evans via GitGitGadget
2026-10-09 12:00 ` [PATCH v2 1/6] doc: add new gitmergeconflicts man page Julia Evans via GitGitGadget
2026-10-09 17:58 ` Junio C Hamano
2026-10-09 18:53 ` Julia Evans
2026-10-09 21:54 ` Junio C Hamano
2026-10-09 12:00 ` [PATCH v2 2/6] doc: git-merge: link to new merge conflicts guide Julia Evans via GitGitGadget
2026-10-09 18:20 ` Junio C Hamano
2026-10-09 12:00 ` [PATCH v2 3/6] doc: git-rebase: " Julia Evans via GitGitGadget
2026-10-09 18:22 ` Junio C Hamano
2026-10-09 12:00 ` [PATCH v2 4/6] doc: git-revert: " Julia Evans via GitGitGadget
2026-10-09 18:24 ` Junio C Hamano
2026-10-09 12:00 ` [PATCH v2 5/6] doc: git-cherry-pick: " Julia Evans via GitGitGadget
2026-10-09 18:26 ` Junio C Hamano
2026-10-09 20:12 ` Julia Evans
2026-10-09 12:00 ` [PATCH v2 6/6] doc: git-pull: " Julia Evans via GitGitGadget
2026-10-09 18:27 ` Junio C Hamano
2026-10-09 15:41 ` [PATCH v2 0/6] [doc] Add new page on merge conflicts Junio C Hamano
2026-10-09 15:53 ` Julia Evans
2026-10-09 22:10 ` Ben Knoble
2026-10-09 18:36 ` 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=e2ef9cf9-a87b-4374-bedd-8f7ab1114961@app.fastmail.com \
--to=julia@jvns.ca \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=gitster@pobox.com \
--cc=ps@pks.im \
/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