tags:

views:

65

answers:

3

The title is not very clear. What I actually need to do often is the following:

Let's say I have a development going on with several commits c1,c2,... and 3 branches A,B,C

c1--c2--c3--(B)--c4--(A,C)

Branch A and C are at the same commit.

Now I want branch A to go back where B is, so that it loks like this:

c1--c2--c3--(A,B)--c4--(C)

Important is that this has to happen locally and on github.

+5  A: 

Use the reset subcommand:

git checkout A
git reset --hard B
git push --force github

As a sidenote, you should be careful when using git reset while a branch has been pushed elsewhere already. This may cause trouble to those who have already checked out your changes.

Bram Schoenmakers
If there are any commits on branch A, they will be lost by `git reset --hard B`. If there are commits on branch A, then you should use `git rebase` to relocate the branch.
Tim Henigan
+1  A: 

If there are no commits on branch A, then the git reset --hard B solution given by Bram Schoenmakers will work.

However if there are commits are branch A which must be preserved, then the following should do the trick:

  1. Make a backup copy of your repo (just in case)
  2. git checkout A
  3. git rebase -i --onto B SHA1-A^

...where SHA1-A^ is the commit id of the parent of your branch A

See the git rebase man page for details.

NOTE: This will rewrite history (as rebase always does). Special consideration should be made if your A branch was ever pushed to a public repo.

Tim Henigan
+1  A: 

Delete the branch both locally and remotely, recreate the branch, push the branch back up to the server.

git branch -d A
git push origin :heads/A
git branch B A
git push origin A:A

Alternately you can use the following command to undo that last commit.

git revert c4

Which will make your timeline look like:

c1--c2--c3--(B)
             \
              c4--(C)
               \
                (^c4)--(A)

where (^c4) is a commit that undoes c4

I don't recommend using rebase or revert on a branch that has been pushed to a remote repo, they can cause tons of trouble for you or anyone else using that repo.

kubi
Deleting and recreating the remote branch will also cause tons of trouble for anyone using the repo, though. (As I have learned from painful experience.)
ebneter
What is the issue? I do this all the time and it never causes any trouble, but now I'm wondering if I've just been getting lucky.
kubi