In one of the previous posts I talked about a way to copy a bunch of commits from one git branch to another one. Today had to copy commits again, but for a different reason.
Several days ago I started a new project in a new repository. I made several commits on my
master branch when I realized that I needed to create a pull request to perform a code review. What I had:
A -- B -- C -- D -- E master
What I’d like to have:
X master \ A -- B -- C -- D -- E feature
Since it was a new repository I didn’t care about the commit history. First of all I created a new detached branch to have a clear history:
$ git checkout --orphain temp $ git rm -rf . $ vim .gitignore $ git add .gitignore $ git commit -m "Initial commit"
Now my history looks like this:
A -- B -- C -- D -- E master X temp
So there were two histories, not related to each other. The next step was to create a feature branch and copy the commits there.
$ git checkout -b feature $ git rev-list --reverse master | git cherry-pick --stdin $ git push -u origin feature
Because was an empty branch, there were no conflicts. Another difference between this command and the command from the previous post, is that I didn’t use a commit range, but a whole branch as an argument for the
rev-list command. I was almost there:
A -- B -- C -- D -- E master X temp \ A' -- B' -- C' -- D' -- E' feature
The final step was to set the
master branch to the commit
X and remove the
$ git checkout master $ git reset --hard temp $ git branch -d temp $ git push -f origin master