How do I create a new GitHub repo from a branch in an existing repo?

旧时模样 提交于 2019-11-27 16:34:48

I started with @user292677's idea, and refined it to solve my problem:

  1. Create the new-repo in github.
  2. 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.
  3. $ 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 git@github.com: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
J. C. Salomon
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 to you/repo.
  • Run git clone git@github.com: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 using git-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 git@github.com:you/orig.git
  • Run git clone orig copy
  • As I described above, but from within the local copy repo, reset the master 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 of copy, push master, and you’re done!
  1. Create the NEW_REPOSITORY in github.
  2. cd OLD_REPOSITORY
  3. 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

Not sure whether this is a good way, but it's easy anyway:

git clone -b new-project git@github.com:User/YourProject.git newProjcet

Then create a new repo on github, and push it.

Remembering that when you simply create a new repo, you lose reference to the old one, and make it harder to maintain any update to the original project synched to the new one. Perhaps isn't it better to fork the repo?

Little addition to the correct answer:

$ git push git@github.com:accountname/new_repo +old_branch:master

"git@github.com:accountname/new_repo" => get from github "Clone or download" pulldown menu

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!