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