git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: What is the best way to backport a feature?

From
Michael J Gruber <git@drmicha.warpmail.net>
Date
Nov 29, 2009, 17:02 UTC
Message-ID
<4B12A928.2000401@drmicha.warpmail.net>
In-Reply-To
<loom.20091129T164518-669@post.gmane.org>
Peter Weseloh venit, vidit, dixit 29.11.2009 17:28:
Show 25 quoted lines
> Hi,
> 
> Suppose I have the following situation:
> 
>   o--o--o                    Release_1.0
>  /    \  \                  
> o-o-o--o--o-o-o-o-o-o---o--o Mainline
>      \       \       \ /    
>       F1--F2--M1--F3--M2     Feature_A
> 
> Now I want to backport "Feature_A" to the "Release_1.0" branch so that it gets
> included into the next minor release, i.e. I want to apply the commits F1, F2
> and F3 onto the "Release_1.0" branch.
> I cannot just merge "Feature_A" into "Release_1.0" because that would also bring
> in the merges M1 and M2 so a lot of other stuff from the Mainline.
> 
> I played with cherry-pick but that means I have to manually find the commits F1,
> F2 and F3 (which in reality could be many more if Feature_A is big) which is not
> very nice.
> 
> I also tried 'rebase -i' but that means I have to manually delete all the lines
> for changesets from the mainline. Also not very nice.
> 
> Is there a better way? To me this scenario sounds not unusual but I could not
> find a solution.
The problem is that you've been a bad boy to begin with ;)

Seriously, I suggest reading up on "topic branches". Feature_A should have been based off the common merge base of Mainline and Release_1.0, and, even more importantly, there should not have been any merges from Mainline into Feature_A. So, that branch is not at all what one would call a feature branch/topic branch. Hopefully, this scenario is very uncommon :)

I assume you have to deal with the given structure anyhow, and merge will not help. The only solution is to try and replay your Feature_A commits on top of the release branch. (Since you have merged Feature_A into Mainline already, you probabably don't want to redo that branch and merge.)

I you have many commits to deal with I suggest finding a good semi-automated way to list the commits you are after, such as git rev-list --no-merges sha1..Feature_A (with sha1 being the fork point). A good way to find out could be git log --no-merges sha1..Feature_A.

Then, try and cherry-pick those onto the release branch. Alternatively, you can use format-patch/am, or in fact try with rebase (I thought it would ignore merges), which basically does what cherry-pick does.

Cheers, Michael

Previous: Pascal ObryNext: Greg A. Woods
Message 5 of 10 in “What is the best way to backport a feature?”
  1. Peter WeselohNov 29, 2009
  2. Björn SteinbrinkNov 29, 2009
  3. Pascal ObryNov 29, 2009
  4. Pascal ObryNov 29, 2009
  5. Michael J GruberNov 29, 2009
  6. Greg A. WoodsNov 30, 2009
  7. Fwd: What is the best way to backport a feature?Peter Weseloh, Nov 29, 2009
  8. Johannes SixtNov 29, 2009
  9. Peter WeselohNov 29, 2009
  10. Björn SteinbrinkNov 29, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.