threads / discuss / 35176

Moving commits from one branch to another (improving my git fu!)

Subject: Moving commits from one branch to another (improving my git fu!)

## tl;dr

7 messages between Oct 22, 2013 and Oct 22, 2013.

replies: 6people: 4as markdown or json

Mandeep Sandhu· Oct 22, 2013, 05:38 UTC · lore
Hi All,
I'm in a bit of a pickle! :) So I've come to ask for help from the guru's here.

My story is not unique but somehow the various suggested solutions don't seem to work in my case.

* I was working on a feature which was supposed to be done off our
'dev' branch. But instead I forgot and branched out my topic branch
from master (or as we call it 'stable').
* I did 2 commits and finished off my work. Only later realizing that
it had to be done off 'dev'.
* Now I want to move my 2 commits (which are the top 2 commits on my
topic branch) to a new branch which is branched off 'dev'.
$ git branch
* topicA
* stable
* dev
topicA was based on stable. But now I want to base it dev.
So I did what was most suggested, i.e use 'git rebase --onto'.
Here's what I did when I was in topicA:

$ git rebase dev stable topicA (this was suggested in the manpage as well).

This started off a massive rebase operation, because the 'dev' branch is vastly diverged from stable, and a lot of conflicts started appearing.

I'm not sure if I'm doing it right here, so can anyone suggest whether this is right or do I need to do it differently?

PS: Please CC me (mandeepsandhu.chd@gmail.com) in your reply as I'm
not currently subscribed to the list.
Thanks for your time.

Regards, -mandeep

Peter Krefting· Oct 22, 2013, 05:52 UTC · re: Mandeep Sandhu · lore

Re: Moving commits from one branch to another (improving my git fu!)

Mandeep Sandhu:
> Here's what I did when I was in topicA:
>
> $ git rebase dev stable topicA
> (this was suggested in the manpage as well).

I guess you also had an "--onto" in there, as the above would throw a syntax error. As long as the branches are in order, I cannot see how that wouldn't do what you wanted.

However, the easiest way to do it would probably just to run:
  git checkout topicA
  git rebase dev

As long as "dev" already contains all the commits in "stable", that should work fine. If not, then you would need something more complicated.

Another way to do it would be to use cherry-pick on a new branch:
  git checkout -b new_topicA dev
  git cherry-pick stable..topicA
-- 
\\// Peter - http://www.softwolves.pp.se/
Mandeep Sandhu· Oct 22, 2013, 06:11 UTC · re: Peter Krefting · lore

Re: Moving commits from one branch to another (improving my git fu!)

Show 7 quoted lines
>> $ git rebase dev stable topicA
>> (this was suggested in the manpage as well).
>
>
> I guess you also had an "--onto" in there, as the above would throw a syntax
> error. As long as the branches are in order, I cannot see how that wouldn't
> do what you wanted.
Yes, you're right. There was "--onto" there.

The only problem is that there were a LOT of conflicts when I ran this cmd in places which have nothing to do with my commit. And as I said, dev is vastly different from stable.

Show 8 quoted lines
>
> However, the easiest way to do it would probably just to run:
>
>  git checkout topicA
>  git rebase dev
>
> As long as "dev" already contains all the commits in "stable", that should
> work fine. If not, then you would need something more complicated.

I don't think thats the case currently. People commit bug-fixes to 'stable' (from which a release will be made later) and all new and experimental stuff is tried on 'dev'. So there's a lot in 'dev' that's not there in 'stable'.

Show 5 quoted lines
>
> Another way to do it would be to use cherry-pick on a new branch:
>
>  git checkout -b new_topicA dev
>  git cherry-pick stable..topicA

Hmmm...this looks safe to do. If I do "git log stable..topicA" it should only show my commits made on top of stable, right? Or I can even mention the commit SHA here?

Thanks, -mandeep

>
> --
> \\// Peter - http://www.softwolves.pp.se/
Bryan Turner· Oct 22, 2013, 06:00 UTC · re: Mandeep Sandhu · lore

Re: Moving commits from one branch to another (improving my git fu!)

A quick glance at your command line and the man page for git rebase suggests the problem was you didn't actually use --onto. I believe the correct command would be:

git rebase --onto dev stable topicA

That should start by determining which commits are one topicA but not stable and then checkout dev and apply those new commits.

Hope this helps, Bryan Turner

On 22 October 2013 16:38, Mandeep Sandhu <mandeepsandhu.chd@gmail.com> wrote:
Show 47 quoted lines
> Hi All,
>
> I'm in a bit of a pickle! :) So I've come to ask for help from the guru's here.
>
> My story is not unique but somehow the various suggested solutions
> don't seem to work in my case.
>
> * I was working on a feature which was supposed to be done off our
> 'dev' branch. But instead I forgot and branched out my topic branch
> from master (or as we call it 'stable').
> * I did 2 commits and finished off my work. Only later realizing that
> it had to be done off 'dev'.
> * Now I want to move my 2 commits (which are the top 2 commits on my
> topic branch) to a new branch which is branched off 'dev'.
>
> $ git branch
> * topicA
> * stable
> * dev
>
> topicA was based on stable. But now I want to base it dev.
>
> So I did what was most suggested, i.e use 'git rebase --onto'.
>
> Here's what I did when I was in topicA:
>
> $ git rebase dev stable topicA
> (this was suggested in the manpage as well).
>
> This started off a massive rebase operation, because the 'dev' branch
> is vastly diverged from stable, and a lot of conflicts started
> appearing.
>
> I'm not sure if I'm doing it right here, so can anyone suggest whether
> this is right or do I need to do it differently?
>
> PS: Please CC me (mandeepsandhu.chd@gmail.com) in your reply as I'm
> not currently subscribed to the list.
>
> Thanks for your time.
>
> Regards,
> -mandeep
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
Mandeep Sandhu· Oct 22, 2013, 06:15 UTC · re: Bryan Turner · lore

Re: Moving commits from one branch to another (improving my git fu!)

On Tue, Oct 22, 2013 at 11:30 AM, Bryan Turner <bturner@atlassian.com> wrote:
Show 5 quoted lines
> A quick glance at your command line and the man page for git rebase
> suggests the problem was you didn't actually use --onto. I believe the
> correct command would be:
>
> git rebase --onto dev stable topicA
Yes, thats the cmd I gave. (missed typing onto in the mail though)
>
>
> That should start by determining which commits are one topicA but not
> stable and then checkout dev and apply those new commits.

Thats what I expected too. There are only 2 commits that were made in topicA. So I was expecting it to pick those 2 and apply them on the dev branch. But instead it's applying a LOT of commits on dev. Remember that 'dev' is very different from 'stable'.

As suggested, maybe cherry-pciking is what I need to do.

Thanks, -mandeep

Show 53 quoted lines
>
>
> Hope this helps,
> Bryan Turner
>
> On 22 October 2013 16:38, Mandeep Sandhu <mandeepsandhu.chd@gmail.com> wrote:
>> Hi All,
>>
>> I'm in a bit of a pickle! :) So I've come to ask for help from the guru's here.
>>
>> My story is not unique but somehow the various suggested solutions
>> don't seem to work in my case.
>>
>> * I was working on a feature which was supposed to be done off our
>> 'dev' branch. But instead I forgot and branched out my topic branch
>> from master (or as we call it 'stable').
>> * I did 2 commits and finished off my work. Only later realizing that
>> it had to be done off 'dev'.
>> * Now I want to move my 2 commits (which are the top 2 commits on my
>> topic branch) to a new branch which is branched off 'dev'.
>>
>> $ git branch
>> * topicA
>> * stable
>> * dev
>>
>> topicA was based on stable. But now I want to base it dev.
>>
>> So I did what was most suggested, i.e use 'git rebase --onto'.
>>
>> Here's what I did when I was in topicA:
>>
>> $ git rebase dev stable topicA
>> (this was suggested in the manpage as well).
>>
>> This started off a massive rebase operation, because the 'dev' branch
>> is vastly diverged from stable, and a lot of conflicts started
>> appearing.
>>
>> I'm not sure if I'm doing it right here, so can anyone suggest whether
>> this is right or do I need to do it differently?
>>
>> PS: Please CC me (mandeepsandhu.chd@gmail.com) in your reply as I'm
>> not currently subscribed to the list.
>>
>> Thanks for your time.
>>
>> Regards,
>> -mandeep
>> --
>> To unsubscribe from this list: send the line "unsubscribe git" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
Noufal Ibrahim· Oct 22, 2013, 12:42 UTC · re: Mandeep Sandhu · lore

Re: Moving commits from one branch to another (improving my git fu!)

Mandeep Sandhu <mandeepsandhu.chd@gmail.com> writes:
Show 14 quoted lines
> Hi All,
>
> I'm in a bit of a pickle! :) So I've come to ask for help from the guru's here.
>
> My story is not unique but somehow the various suggested solutions
> don't seem to work in my case.
>
> * I was working on a feature which was supposed to be done off our
> 'dev' branch. But instead I forgot and branched out my topic branch
> from master (or as we call it 'stable').
> * I did 2 commits and finished off my work. Only later realizing that
> it had to be done off 'dev'.
> * Now I want to move my 2 commits (which are the top 2 commits on my
> topic branch) to a new branch which is branched off 'dev'.

I had a situtation similar to this a while ago and used the --onto option to rebase. The details are at http://nibrahim.net.in/2012/01/09/moving_topic_branches_in_git.html

[...]
-- 
Cordially,
Noufal
http://nibrahim.net.in
Mandeep Sandhu· Oct 22, 2013, 12:51 UTC · re: Noufal Ibrahim · lore

Re: Moving commits from one branch to another (improving my git fu!)

Thanks for the link.

I too tried doing a rebase with --onto, though as I said, I was getting a lot of conflicts while doing it.

So cherry-picking my 2 commits was the solution that worked. I had also screwed up my topic branch by doing different combo's of this cmd and using --set-upstream-to option to point to 'dev' on a branch that was branched off from 'stable'! :)

Lesson learned. I'll be careful when doing branching next time :)
-mandeep
On Tue, Oct 22, 2013 at 6:12 PM, Noufal Ibrahim <noufal@nibrahim.net.in> wrote:
Show 28 quoted lines
> Mandeep Sandhu <mandeepsandhu.chd@gmail.com> writes:
>
>> Hi All,
>>
>> I'm in a bit of a pickle! :) So I've come to ask for help from the guru's here.
>>
>> My story is not unique but somehow the various suggested solutions
>> don't seem to work in my case.
>>
>> * I was working on a feature which was supposed to be done off our
>> 'dev' branch. But instead I forgot and branched out my topic branch
>> from master (or as we call it 'stable').
>> * I did 2 commits and finished off my work. Only later realizing that
>> it had to be done off 'dev'.
>> * Now I want to move my 2 commits (which are the top 2 commits on my
>> topic branch) to a new branch which is branched off 'dev'.
>
> I had a situtation similar to this a while ago and used the --onto
> option to rebase. The details are at
> http://nibrahim.net.in/2012/01/09/moving_topic_branches_in_git.html
>
> [...]
>
>
> --
> Cordially,
> Noufal
> http://nibrahim.net.in

← back to recent threads