How can I copy the content of a branch to a new local branch?
I have worked on a local branch and also pushed the changes to remote. I want to revert the changes on that branch and do something else on it, but I don't want to lose the work completely. I was thinking of something like create a new branch locally and copy the old branch there, then I can revert the changes and continue working on the old branch. Is there a better way maybe? Or how do I do this?
git checkout old_branch git branch new_branch
This will give you a new branch "new_branch" with the same state as "old_branch".
This command can be combined to the following:
git checkout -b new_branch old_branch
Read more... Read less...
git branch copyOfMyBranch MyBranch
This avoids the potentially time-consuming and unnecessary act of checking out a branch. Recall that a checkout modifies the "working tree", which could take a long time if it is large or contains large files (images or videos, for example).
With Git 2.15 (Q4 2017), "
git branch" learned "
-c/-C" to create a new branch by copying an existing one.
See commit c8b2cec (18 Jun 2017) by Ævar Arnfjörð Bjarmason (
See commit 52d59cc, commit 5463caa (18 Jun 2017) by Sahil Dua (
(Merged by Junio C Hamano --
gitster -- in commit 3b48045, 03 Oct 2017)
branch: add a
-c) option to go with
Add the ability to
--copya branch and its reflog and configuration, this uses the same underlying machinery as the
-m) option except the reflog and configuration is copied instead of being moved.
This is useful for e.g. copying a topic branch to a new version, e.g.
work-2after submitting the
worktopic to the list, while preserving all the tracking info and other configuration that goes with the branch, and unlike
--movekeeping the other already-submitted branch around for reference.
Note: when copying a branch, you remain on your current branch.
As Junio C Hamano explains:
When creating a new branch
Bby copying the branch
Athat happens to be the current branch, it also updates
HEADto point at the new branch.
It probably was made this way because "
git branch -c A B" piggybacked its implementation on "
git branch -m A B",
This does not match the usual expectation.
If I were sitting on a blue chair, and somebody comes and repaints it to red, I would accept ending up sitting on a chair that is now red (I am also OK to stand, instead, as there no longer is my favourite blue chair).
But if somebody creates a new red chair, modelling it after the blue chair I am sitting on, I do not expect to be booted off of the blue chair and ending up on sitting on the new red one.