Re: Private/public branches/repos workflow

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jerome Martin <tramjoe.merin@xxxxxxxxx> writes:

> Could you tell me how you would see usage of rebasing inside the
> workflow you describe ? I am thinking about features (mistakenly)
> implemented on top of the private branch that need later to be release
> in the public branch. Can this be the shortcut to avoid lengthy
> cherry-picks ?

Mistakes and changes of plans can happen, but it's not a big deal.

In the git project itself, even the "master" branch that corresponds to
your "private" branch is managed with topic branch workflow, so it is
entirely possible that a topic that was originally meant only for the next
release turns out to be better backported to the maintenance track.

If you have a private "feature-A" topic with many commits:

                     O   public
                      \
 ...---x---x---x---X---S  private
                        \
                         a---b---...---z  feature-A

and later it turns out that it is better to release them also to the
public, instead of cherry-picking the commits to the public, you could at
that point do something like this:

    $ git checkout -b public-feature-A feature-A
    $ git rebase --onto public private

which will first create a new branch "public-feature-A" that points at the
same tip of "feature-A", and then rebases the commits on that branch that
were made since the topic was forked from "private" on top of the tip of
the "public" branch, resulting in:

                       a'--b'--...--z' public-feature-A
                      /
                     O   public
                      \
 ...---x---x---x---X---S  private
                        \
                         a---b---...---z  feature-A

and then you may choose when to merge that to the "public" branch.
By the time you do this, perhaps the original "feature-A" may have already
been merged to "private" after fully tested and audited, like this:

                       a'--b'--...--z' public-feature-A
                      /
                     O   public
                      \
 ...---x---x---x---X---S---x---x---x-----*  private
                        \               / 
                         a---b---...---z  feature-A

and then after you merged "public-feature-A" to "public":

                       a'--b'--...--z' public-feature-A
                      /              \  
                     O---o---...---o--*   public
                      \
 ...---x---x---x---X---S---x---...---x---*  private
                        \               / 
                         a---b---...---z  feature-A

merging "public" back to "private" hopefully may have too many conflicts
between the feature-A and public-feature-A branches, as they are supposed
to be patch equivalent, to produce this:


                       a'--b'--...--z' public-feature-A
                      /              \  
                     O---o---...---o--*---.   public
                      \                     \
 ...---x---x---x---X---S---x---...---x---*---*   private
                        \               / 
                         a---b---...---z  feature-A

After this you could even garbage collect the two topic branches ;-).
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]