How do I create a new GitHub repo from a branch in an existing repo?
I started with @user292677's idea, and refined it to solve my problem:
- Create the new-repo in github.
- cd to your local copy of the old repo you want to extract from, which is set up to track the new-project branch that will become the new-repo's master.
-
$ git push https://github.com/accountname/new-repo.git +new-project:master
The new Github repo is finished. The result is;
- a new Github repository named new-repo,
- whose
master
corresponds to the old repo's new-project, with - all history preserved.
In fact, I found that by using this method, I could create the new repo with a hand-picked selection of branches, renamed as I wanted:
$ git push [email protected]:accountname/new_repo +new-project:master +site3a:rails3
The result is that the pre-existing site3a branch is now also moved to the new repo and will appear as rails3. This works really well: the network diagram shows the new master and rails3 with full history and in their correct relationship to each other.
Update 2013-12-07: Used this with another project, and verified that this recipe still works.
Update 2018-01-11: Updated step 3. to use GitHub recommendation for https protocol. Recipe still works.
Update:
cd to local repo containing old_branch and:
$ git push https://github.com/accountname/new_repo.git +old_branch:master
- Create the NEW_REPOSITORY in github.
- cd OLD_REPOSITORY
- git push https://github.com/accountname/NEW_REPO +master:master
And that is all. (Note: git history preserved)
I had tried the answer above and found it not specific enough as it didn't specify +master:master which is what I needed to make it work. It works great.
Source (with my modifications to avoid ssh issues with github): Mauricio Aiello, former Java Senior Developer, https://www.quora.com/How-do-I-create-a-new-GitHub-repository-from-a-branch-in-an-existing-repository
git clone -b new-project /path/to/repo /new/repo/path
Edit: Within GitHub, you can “fork” the repo, then go to the Admin tab in your clone. Beneath “Repository name” and “Visibility” is “Default Branch” with a drop-down menu of branches. Choose new-project
.
Re-edit: I just realized it’s the master
branch you want set, not just the “default” branch. So…
- On GitHub, clone
them/repo
toyou/repo
. - Run
git clone [email protected]:you/repo.git
- Start
gitk
. - [You might want to create an
old-master
branch so you don’t lose track of the old commits.] - Find most recent commit on the
new-project
branch, right-click on the commit message, and select “Reset master branch to here”. (You can also do this at the command line usinggit-reset
, but I haven’t figured out the correct invocation.)
Your next push up to your GitHub repo will need to be done with the --force
option, but otherwise you’re done.
If it’s one of your own repos you’re doing this to…
- Run
git clone [email protected]:you/orig.git
- Run
git clone orig copy
- As I described above, but from within the local
copy
repo, reset themaster
branch to where you want it. - Create the empty GitHub project
you/copy
. Follow the directions on GitHub to set up that project as a remote for your local version ofcopy
, pushmaster
, and you’re done!
Not sure whether this is a good way, but it's easy anyway:
git clone -b new-project [email protected]:User/YourProject.git newProjcet
Then create a new repo on github, and push it.