Copy a branch between Git repositories
Git is tricky to use: after 4 years I still have a hard time figuring out how to do simple operations with it. I just spent 30 minutes on that one:
Say you have 2 copies of the same repository repo1 & repo2. In repo1 there’s a
branch called copybranch that you want to copy to repo2 without merging it: just
copy the branch. git pull repo1 copybranch
from repo2 doesn’t work because it
will try to merge the copybranch into the current branch: no good.
It looks like git fetch repo1 copybranch
would be the way to go, but when I
did it, here’s what I saw:
From repo1
* branch copybranch -> FETCH_HEAD
After that a quick look at the logs doesn’t show copybranch
, FETCH_HEAD
, or
any of the commits from copybranch
. What happenned? Git copied the content of
copybranch, but instead of creating another branch named copybranch it creates a
temporary reference called FETCH_HEAD
, but FETCH_HEAD
doesn’t appear in the
logs. In summary: Git copied the branch, & made it invisible, because you
know… it makes perfect sense to hide what you just copied.
So how do you copy the branch, and create a branch with the same name referencing the commits? Here it is:
git fetch repo1 copybranch:copybranch