[gmx-developers] Accidental push of merge, was: git release branch
David van der Spoel
spoel at xray.bmc.uu.se
Mon Mar 8 08:10:29 CET 2010
On 2010-03-08 07.04, Roland Schulz wrote:
> Hi,
>
> I'm sorry! I just accidentally pushed from a repository where I had
> merged in release-4-0-patches.
>
> I merged with "git merge -s ours release-4-0-patches"
Maybe you or another healthy volunteer can write a step by step howto
for fixing bugs in the release branch and subsequent merge into the head
branch. It should preferentially be cut-and-paste stuff...
>
> man git-merge: "This resolves any number of heads, but the result of the
> merge is always the current branch head. It is meant to be used to
> supersede old
> development history of side branches."
> Or put another way (stackoverflow): "to pull in another [branch], but
> throw away all of the changes that [branch] introduces.
> This keeps the history of a branch without any of the effects of the
> branch."
>
> Thus I merged in the history of release-4-0-patches without changing any
> files in "master".
>
> Thus the good news is that no file was changed by my mistake.
> The bad news is that the history was changed. The history of master now
> also includes the history of release-4-0-patches. This makes most
> bug-fixes now appear twice. Sorry!
>
> I can't undo this because rewriting the history, would produce very
> weird merge conflicts if someone had already pulled after
> I accidentally pushed this merge.
>
> One potential good effect: If we want we can start using the strategy to
> always merge bug fixes from the release branch instead of
> cherry-picking. Because now git knows that the master branch includes
> all bug-fixes up to this point. And thus will merge only further
> bug-fixes. I'd suggest this strategy as explained in the earlier mail.
> See below for detailed explanation of this strategy.
>
> Sorry again for the mistake.
>
> Roland
>
> On Mon, Mar 1, 2010 at 10:02 PM, Roland Schulz <roland at utk.edu
> <mailto:roland at utk.edu>> wrote:
>
> Hi,
>
> currently we are applying the a bugfix to both the HEAD and release
> branch by committing it to one and then cherry-picking it in the other.
>
> If I remember correctly the reason we decided to do this is:
> There might be fixes in the release branch which are workarounds
> which shouldn't be merged into the master branch (where the bug is
> fixed e.g. by a new feature). Thus there are some fixes which should
> be merged into "master" and there are others which should not be
> merged into "master".
>
> The disadvantage of cherry-pick is that git does not know that a
> commit and the cherry-picked copy in a different branch a identical.
> This has several disadvantages:
> - There is no command listing the commands which haven't been merged
> into "master" yet.
> - The log between the "master" and release branch lists also commits
> which are applied to both
> - It makes it more difficult to back-port features (producing more
> merge conflicts)
>
> Thus I suggest the following strategy instead:
>
> - All bug-fixes are committed to the release branch first (if
> one accidentally commits to the "master" branch see below)
> - If it is a workaround which shouldn't be merged into master this
> should be noted in the commit message
> - Next one checks that the release branch doesn't contain any
> unmerged commits (git log mater..release - where release is the name
> of the release branch i.e. currently "release-4-0-patches")
> - If it does contain unmerged commits, one checks that it is clear
> whether the commits are supposed to be merged or not (and asks the
> author if it is not clear)
> - Next one merges the release branch into the "master" branch (git
> checkout master; git merge release)
> - If the release branch contained one or more workarounds which
> shouldn't be included into the "master" branch one reverts those
> with "git revert -n; git commit --amend"
>
> This way it is always clear which commits are bug-fixes and which
> are workarounds and the git logs reflect this difference. Also all
> the problems from above (listing unmerged commits, log between
> versions, back-port) are solved.
>
> I don't think it is possible to switch the strategy at the moment.
> Instead I propose to switch the strategy after the release of 4.5.
>
> What do you think? Should we change the policy in this way? I have
> tried it on a small test repository and the strategy seems to work.
>
> Roland
>
> Minor detail:
> In case one has accidentally committed a bug-fix into the "master"
> branch:
> - One cherry-picks it into the release branch
> - If the bug-fix commit in the master branch isn't committed yet:
> one can rebase or reset it to remove the commit
> - If it is already committed: one can either revert it or merge and
> fix potential conflict in the merge
>
>
> --
> ORNL/UT Center for Molecular Biophysics cmb.ornl.gov
> <http://cmb.ornl.gov>
> 865-241-1537, ORNL PO BOX 2008 MS6309
>
>
>
>
> --
> ORNL/UT Center for Molecular Biophysics cmb.ornl.gov <http://cmb.ornl.gov>
> 865-241-1537, ORNL PO BOX 2008 MS6309
>
--
David van der Spoel, Ph.D., Professor of Biology
Dept. of Cell & Molec. Biol., Uppsala University.
Box 596, 75124 Uppsala, Sweden. Phone: +46184714205.
spoel at xray.bmc.uu.se http://folding.bmc.uu.se
More information about the gromacs.org_gmx-developers
mailing list