From: "Jakub Narębski" <jnareb@gmail.com>
To: Paul Smith <paul@mad-scientist.net>,
Eduard Egorov <Eduard.Egorov@icl-services.com>,
"'git@vger.kernel.org'" <git@vger.kernel.org>
Subject: Re: git merge deletes my changes
Date: Tue, 11 Oct 2016 17:56:48 +0200 [thread overview]
Message-ID: <94ff5fb3-6957-8983-4aa7-e1d5e2692e82@gmail.com> (raw)
In-Reply-To: <1476121942.15746.99.camel@mad-scientist.net>
W dniu 10.10.2016 o 19:52, Paul Smith pisze:
> On Mon, 2016-10-10 at 10:19 +0000, Eduard Egorov wrote:
>> # ~/gitbuild/git-2.10.1/git merge -s subtree --squash ceph_ansible
>>
>> Can somebody confirm this please? Doesn't "merge -s subtree" really
>> merges branches?
>
> I think possibly you're not fully understanding what the --squash flag
> does... that's what's causing your issue here, not the "-s" option.
>
> A squash merge takes the commits that would be merged from the origin
> branch and squashes them into a single patch and applies them to the
> current branch as a new commit... but this new commit is not a merge
> commit (that is, when you look at it with "git show" etc. the commit
> will have only one parent, not two--or more--parents like a normal merge
> commit).
>
> Basically, it's syntactic sugar for a diff plus patch operation plus
> some Git goodness wrapped around it to make it easier to use.
Actually this is full merge + commit surgery (as if you did merge with
--no-commit, then deleted MERGE_HEAD); the state of worktree is as if
it were after a merge.
>
> But ultimately once you're done, Git has no idea that this new commit
> has any relationship whatsoever to the origin branch. So the next time
> you merge, Git doesn't know that there was a previous merge and it will
> try to merge everything from scratch rather than starting at the
> previous common merge point.
>
> So either you'll have to use a normal, non-squash merge, or else you'll
> have to tell Git by hand what the previous common merge point was (as
> Jeff King's excellent email suggests). Or else, you'll have to live
> with this behavior.
The `git subtree` command (from contrib) allows yet another way: it
squashes *history* of merged subproject (as if with interactive rebase
'squash'), then merges this squash commit.
Now I know why this feature is here...
--
Jakub Narębski
next prev parent reply other threads:[~2016-10-11 15:57 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <AM4PR03MB1636BE3423E2BC4F0E998159DBDB0@AM4PR03MB1636.eurprd03.prod.outlook.com>
2016-10-10 10:19 ` git merge deletes my changes Eduard Egorov
2016-10-10 17:52 ` Paul Smith
2016-10-11 15:56 ` Jakub Narębski [this message]
2016-10-12 5:51 ` Eduard Egorov
2016-10-10 9:39 Eduard Egorov
2016-10-10 15:26 ` Jeff King
2016-10-11 7:11 ` Eduard Egorov
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=94ff5fb3-6957-8983-4aa7-e1d5e2692e82@gmail.com \
--to=jnareb@gmail.com \
--cc=Eduard.Egorov@icl-services.com \
--cc=git@vger.kernel.org \
--cc=paul@mad-scientist.net \
/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).