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