[Google SOC] Rebase command
Peter Arrenbrecht
peter.arrenbrecht at gmail.com
Wed Mar 26 05:47:27 CDT 2008
On Wed, Mar 26, 2008 at 11:27 AM, Stefano <stefano at inventati.org> wrote:
> Hi,
> during the process of making up my mind I wrote a very simple script
> whose aim is
> to ensure that I got the point. Please correct me if I'm wrong.
>
> I read a lot about it and there are several pros and cons in rebasing,
> but I think it's
> widely recognized as a killer-feature of git.
>
> The main problems lay when dealing with user interaction/interruption,
> that's why it's my
> intention (thank you Mezard for the hint) to start working on a
> non-interruptible version
> and eventually decide to improve it. (Note: git allows interaction in
> very interesting way)
>
> Now, I'm going to investigate how it could be done in Mercurial.
> Please don't hesitate to post any suggestion!
>
> Regards,
> Stefano Tortarolo
>
> #!/bin/sh
> BASEDIR=`pwd`
>
> echo "-- Initializing Master repository"
> hg init Master
>
> echo -e "\n-- User a clones, adds a file and pushes"
> hg clone Master user_a && cd user_a
> echo "testa1" > a_1; hg add a_1; hg commit -m "added file a_1" ; hg push
>
> echo -e "\n-- User b clones, adds a file without pushing"
> cd $BASEDIR
> hg clone Master user_b && cd user_b
> echo "testb1" > b_1; hg add b_1; hg commit -m "added file b_1"
>
> echo -e "\n-- User a adds a file and pushes"
> cd $BASEDIR/user_a
> echo "testa2" > a_2; hg add a_2; hg commit -m "added file a_2" ; hg push
>
> echo -e "\n-- Now user b pulls from Master"
> cd $BASEDIR/user_b
> hg pull ; hg heads
>
> # User b gets 2 heads and its commit is between id 0 and id 2
> # He never pushed on Master (he's working on a local repository for now)
> # so it would be great if he could put his commit on top of the revisions
> # doing something like:
> # hg rebase Master
>
> # currently he'll do a merge and the history will keep trace of it
> # hg merge
> cd $BASEDIR && rm -rf Master user_a user_b a_1 a_2 b_1
Basically yes, but:
1. It gets more interesting if both A and B work on the same file (a
suitable line distance apart) so three-way-merge will be needed.
2. The "transplant" case is more interesting, too, where A wants to
cherry-pick change Y from B's repo where B has new unpushed changes X,
Y, Z.
-peo
More information about the Mercurial-devel
mailing list