From: "Philip Oakley" <philipoakley@iee.org>
To: "Robert Dailey" <rcdailey.lists@gmail.com>, "Git" <git@vger.kernel.org>
Cc: "Johannes Schindelin" <Johannes.Schindelin@gmx.de>
Subject: Re: Rebasing a branch with merges
Date: Fri, 6 Jan 2017 21:28:59 -0000 [thread overview]
Message-ID: <49C0981FE7D04AE2AC0BBB011FD74B90@PhilipOakley> (raw)
In-Reply-To: CAHd499BREpaHHyN89a1HchyJiQzPpdo3NSfoLLGVONEmX1m19g@mail.gmail.com
From: "Robert Dailey" <rcdailey.lists@gmail.com>
> Here's the scenario:
>
> I create a topic branch so one other developer and myself can work on
> a feature that takes 2 weeks to complete. During that 2 week period,
> changes are occurring on master that I need in my topic branch. Since
> I have a collaborator on the branch, I opt for merges instead of
> rebase.
>
> Each day I merge from master to the topic branch, which changes code
> I'm actively working in and requires semantic changes (functions
> renamed, moved, etc).
>
> Once I'm ready to merge the topic branch back into master, I have two
> options (bearing in mind the goal is to keep history as clean as
> possible. Furthermore this implies that the constant merging into
> topic from master has made the topic branch look unwieldy and
> difficult to audit):
a broader question zero;
0. Is the merge always clean? Do you always do a preparatory fixup! to
ensure that the merge will be clean?
Ensuring that the merge will be clean should greatly simplify your decision
about process.
>
> 1. Do a squash merge, which keeps history clean but we lose context
> for the important bits (the commits representing units of work that
> contribute to the topic itself).
>
> 2. Do a final rebase prior to merging.
>
> #2 doesn't seem to be possible due to patch ordering. For example, if
> I have real commits after merge commits that depend on those changes
> from master being present as a base at that point in time, the rebase
> will cause the patch before it to no longer include those changes from
> master.
How much of the historic fixups to cover changes on master do you want to
keep visible? i.e. how many fork-points are truly needed (a. by you, b. by
the project - personal knowledge vs corporate knowledge).?
>
> Is there a mechanism to rebase in this situation to both achieve a
> clean, linear history for the topic branch and allow fast forward
> merging if desired, while still not causing superfluous conflicts due
> to the merges being omitted during the rebase?
>
> Thanks in advance for any advice in this scenario.
>
Have you looked at @dscho's garden-shears scripts that he uses on
Git-for-Windows as he has to continuously rebase the Windows specific
patches on top of the progressing Git master? Very similar issues ;-)
https://github.com/git-for-windows/build-extra/blob/master/shears.sh
https://blogs.msdn.microsoft.com/visualstudioalm/2016/09/03/whats-new-in-git-for-windows-2-10/
(#Fun Facts)
--
Philip
next prev parent reply other threads:[~2017-01-06 21:29 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-06 19:12 Rebasing a branch with merges Robert Dailey
2017-01-06 21:28 ` Philip Oakley [this message]
2017-01-09 18:52 ` Robert Dailey
2017-01-09 21:03 ` Philip Oakley
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=49C0981FE7D04AE2AC0BBB011FD74B90@PhilipOakley \
--to=philipoakley@iee.org \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=rcdailey.lists@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