// truncate 2.1
git co 2.1
git br 2.2    // 2.2 will retain all commits you reset below
git reset tag2.1 --hard

// revert selected commits in what will be 2.2
git co 2.2
git revert A..B

// and you have 2.2 that will still contain A, B, but will have reverseA, 
reverseB at the tail. 

branch 2.1: A   <-   B 
branch 2.2: A   <-   B   <-   C   <-   D   <-   ...    <- K <- reverseA   
<-  reverseB

All commits in 2.2 retain commit IDs, so for other team members revA and 
revB will just be a pull/merge.

The 2.1 branch, though will cause a bit of headache for some who rely on it 
as remote. They will have to do

git fetch --all -p 

// -p purges local cache, should put new "remote" 2.1 in the right place 
for people.


Alternatively,

// truncate 2.1
git co A-1
git br 2.2
git reset tag2.1 --hard

// revert selected commits in what will be 2.2
git co 2.2
git cherry-pick C..K

But in this case, C-K in 2.2 branch will have new commit IDs.

Daniel.




On Sunday, June 17, 2012 6:12:26 AM UTC-7, EricP wrote:
>
> Hi, 
>
>    I've been working on a branch, say '2.1' and made a few commits on 
> it. We've made a release and tagged the changeset at which the commit 
> was produced, say 'tag2.1'. 
>
>    Development continued and a few more commits were made on that 
> branch, the '2.1'. 
>
>    As the development goes, we think it would be a better idea to 
> create a branch '2.2' that starts at the tag where the release was 
> made and keep '2.1' only for the maintenance of that release. 
>
> So here's what we have at the moment: 
>
>                          (tag2.1) 
> branch 2.1 :  A   <-   B   <-   C   <-   D   <-   ...    <- K 
>
> Here is what we would like to have: 
>
>
> changesets C up to K to be on a branch 2.2 starting at 'tag2.1': 
>
>                         (tag2.1) 
> branch 2.1: A   <-   B 
> branch 2.2:            <-   C'   <-   D'   <-    E'   <-   ...    <- K' 
>
> Any hints? 
>
> I tried a few things like: 
>
> $ git checkout 2.1 
> $ git branch 2.2 'tag2.1' 
> $ git reset --hard 'tag2.1' 
>
> But that left me with an inconsistent repo... 
>
> $ git checkout 2.1 
> $ git branch tmp 'tag2.1' 
> $ git branch 2.2 'tag2.1' 
> $ git rebase --onti 2.2 tmp 2.1 
>
> But did not leave me with the expected result either. 
>
> Any hint is welcome. 
>
> Cheers! 
>
> -- 
> - Eric 
>
> -- 
> Eric Parent 
> mailto:parent.eri...@gmail.com 
> blog: http://eric-parent.blogspot.com/ 
>

-- 
You received this message because you are subscribed to the Google Groups "Git 
for human beings" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/git-users/-/_bqG2N_d70kJ.
To post to this group, send email to git-users@googlegroups.com.
To unsubscribe from this group, send email to 
git-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/git-users?hl=en.

Reply via email to