23

A have repository with two branches.

Master branch commits:

c1, c2, c3, c4, c5, c6, c7, ..., c15, ...

Staging Branch commits:

c1, c2, c3, c4, c5, c6, c7

I want to move all commits from Master branch after c7 to staging branch

and then revert Master branch

with

git reset --hard c7-hash

How to move/copy specific commits from one branch to another ?

3

1 Answer 1

48

In the case you've described, where all commits on the staging branch are also on the master branch, it's very easy:

git checkout staging
git merge master
git checkout master
git reset --hard c7-hash

The merge will be a fast-forward.

In the general case, you can use git cherry-pick c8 c9 c10 c11 c12 c13 c14 c15 to cherry pick individual commits to the current branch. A shorter way to cherry pick all commits that are on master but not the current branch is git cherry-pick ..master, and there are other examples shown by git help cherry-pick

2
  • After doing this let's say you commit x to the master branch. And then you merge master into staging. Would that merge into staging correctly merge x into staging while not reverting c8...c15 in staging due to the fact those commits were already reset in master? Want to ensure c8...c15 stay in staging after that merge. Commented Apr 9, 2016 at 12:28
  • @MarcusLeon, merging won't revert those commits. Those commits were not reverted in master, they were removed completely. A reset is not a revert. It's easy to create test commits and test scenarios like that, try it. Commented Apr 11, 2016 at 20:14

Not the answer you're looking for? Browse other questions tagged or ask your own question.