From: Jeff King <peff@peff.net>
To: Edmundo Carmona Antoranz <eantoranz@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [RFC/PATCH 1/2] rebuash - squash/rebase in a single step
Date: Sun, 30 Jun 2019 02:53:59 -0400 [thread overview]
Message-ID: <20190630065358.GB31264@sigill.intra.peff.net> (raw)
In-Reply-To: <20190630051816.8814-1-eantoranz@gmail.com>
On Sat, Jun 29, 2019 at 11:18:15PM -0600, Edmundo Carmona Antoranz wrote:
> Rebuash allows us to do squash/rebase without having to resort
> to use rebase.
>
> Consider the case where we have feature branches with merges in history:
>
> Rx: revisions in main branch
> Fx: Revisions in feature branch
> Mx: Merge revisions (some of them with conflicts)
>
> ------------
> R1---R2---R3---R4---R5---R6---R7
> \ \ \
> F1---F2---M1---F3---F4---M2---F5
> ------------
>
> If on M1 there were conflicts, it's more than likely that if we tried to
> cherry-pick R1..F2 on top of R7, we will have to deal with a conflict. But that
> conflict has already been taken care of on M1. So, in order to leverage that
> work that has already been done, instead of looking back, we look forward.
>
> First, we create a (temporary) merge commit of both branches (M3)
>
> ------------
> R1---R2---R3---R4---R5---R6---R7---M3
> \ \ \ /
> F1---F2---M1---F3---F4---M2---F5
> ------------
>
> At this point, all differences between M3 and R7 are the changes related to the
> feature branch, so we can run git reset --soft from M3 to R7 to put all those
> differeces in index, and then we create single revision that is both
> squashed/rebased for our feature branch.
So if I understand correctly, our goal is:
R1--R2--...--R7--R8
where R8 has the same tree as M3?
Wouldn't doing "git merge --squash" do the same thing?
If I set up that scenario like so:
git init repo
cd repo
commit() {
for i in "$@"; do echo $i >file && git add file && git commit -m $i; done
}
commit R1 R2 R3
git checkout -b feature HEAD~2
commit F1 F2
git merge master
commit M1
git checkout master
commit R4 R5 R6
git checkout feature
commit F3 F4
git merge master
commit M2 F5
git checkout master
commit R7
and then do:
git merge --squash feature
I get the same merge that rebuash is doing (with R6 as the merge base,
so we see F5 and R7 conflicting with each other). And then when I finish
it with "git commit", the result is a linear strand with M3 at the tip
(and its commit message is even auto-populated with information from the
squashed commits).
-Peff
next prev parent reply other threads:[~2019-06-30 6:54 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-30 5:18 [RFC/PATCH 1/2] rebuash - squash/rebase in a single step Edmundo Carmona Antoranz
2019-06-30 5:18 ` [RFC/PATCH 2/2] rebuash - support for status Edmundo Carmona Antoranz
2019-06-30 5:28 ` Edmundo Carmona Antoranz
2019-06-30 6:53 ` Jeff King [this message]
2019-06-30 15:09 ` [RFC/PATCH 1/2] rebuash - squash/rebase in a single step Edmundo Carmona Antoranz
2019-06-30 22:39 ` Jeff King
2019-07-01 1:37 ` Edmundo Carmona Antoranz
2019-07-01 18:50 ` Junio C Hamano
2019-07-01 20:48 ` Edmundo Carmona Antoranz
2019-07-01 18:35 ` Junio C Hamano
2019-07-02 11:37 ` Derrick Stolee
2019-07-02 17:20 ` Junio C Hamano
2019-07-02 19:30 ` Johannes Sixt
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190630065358.GB31264@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=eantoranz@gmail.com \
--cc=git@vger.kernel.org \
/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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).