Re: Can't get git rebase --onto to work

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

 



On Thu, Jun 02, 2011 at 11:17:41AM +0100, Howard Miller wrote:
> Trying to explain this as concisely as possible.
> 
> I started with the following branches (names changed to protect the guilty)...
> 
> * clientA
> * clientB
> 
> both have a common ancestry....
> 
> I then checked out clientB created a new branch clientB_patch and did
> a load of work and commits.
> 
> However, I actually wanted all those commits to apply to clientA
> branch instead so....
> 
> git checkout clientA
> git checkout -b clientA_patch     (to ensure I didn't wreck original branch)
> git rebase --onto clientA_patch clientB clientB_patch
> 
> It says "rewinding" head and then applies the commits I would have expected.
> 
> However, I have now been switched to the 'clientB_patch' branch and it
> says that it differs from its tracked remote branch by hundreds of
> commits.
> 
> clientA_patch is unchanged. It seems to have mangled clientB_patch and
> done nothing to clientA_patch. Where did I go wrong?

"--onto clientA_patch"

Please read that out loud.  It's meaning in git is the same as in
English.  What you did was rebase clientB_patch _onto_ clientA_patch.
For more information, see "git help rebase".

What you should have done instead:

git checkout -b clientA_patch clientB_patch
git rebase -i clientA

What that does is create and then checkout a branch called clientA_patch
at the same commit as clientB_patch, then rebase your currently checked
out branch (clientA_patch) on top of clientA; the "-i" option allows you
double check what's being rebased, as otherwise it would take a whole
lot clientB history with it.  Simply delete the lines with the commits
you don't want.


To fix what you currently have, though, you must do the following.  Take
heed, however, as I making assumptions that the situation is unchanged
from what you described above.

git checkout clientB_patch
git reset --hard origin/clientB_patch

I'm assuming your remote is called origin, and also that whatever you
pushed last is the latest.  If not, you'll have to look at "git reflog"
to see which commit to reset the branch to.

Now do:

git checkout clientA_patch
git reset --hard clientB_patch
git rebase -i clientA

That should give you what you want.

Good luck.


Tim

-- 
() ascii ribbon campaign - against html e-mail
/\ www.asciiribbon.org   - against proprietary attachments

Attachment: signature.asc
Description: Digital signature


[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]