Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to turn a git branch into fork?

I have created a branch in my GitHub repo: https://github.com/markmnl/FalconUDP, so there are now two branches: "master" and "single-threaded". I realise now I will never want to merge "single-threaded" back into "master" and want to maintain each branch separately independently of one another, though from time-to-time I will want to cherry pick bits of code from one into the other.

It would be disastrous should the branches be accidentally merged (though not catastrophic of course since I can always go back - it being in source control).

It strikes me what I should have done is fork the project into another repo. (That way I can still do the cherry picking with Pull Requests).

What should I do now?

like image 294
markmnl Avatar asked Dec 08 '13 06:12

markmnl


People also ask

Can I fork a branch in Git?

In github (and in git's mental framework) you clone and fork repositories. There's no way to fork a branch; that doesn't make sense. Just fork the project, and work off the branch you're interested in.

Is a Git branch the same as a fork?

So, unlike a branch, a fork is independent from the original repository. If the original repository is deleted, the fork remains. If you fork a repository, you get that repository and all of its branches.

How do I create a fork in Git?

If you need to fork a GitHub or GitLab repo, it's as simple as navigating to the landing page of the repository in your web browser and clicking on the Fork button on the repository's home page. A forked copy of that Git repository will be added to your personal GitHub or GitLab repo. That's it.

How do I get a new branch from upstream to fork?

On GitHub, navigate to the main page of the forked repository that you want to sync with the upstream repository. Select the Sync fork dropdown. Review the details about the commits from the upstream repository, then click Update branch.


1 Answers

If I understand correctly, you want to create a fork a project within the same user account or organization in GitHub. This seems explicitly unsupported by GitHub, explained their article Alternatives to forking into the same account.

Something you can do, and might be suitable for your purpose, is create a new repository and push the single-threaded branch to it:

  1. Create new repo, completely empty (do NOT add README or other files): https://github.com/new

  2. In your local clone of the original repo, add the new repo as a new remote, let's call this remote repo2 for example:

     git remote add repo2 NEW_REPO_URL
    
  3. Push your single-threaded branch to the new repo (repo2 remote):

     git push -u repo2 single-threaded
    
  4. Delete this branch from the original project, assuming your remote is called origin:

     git push origin :single-threaded
    

This is not the same thing as the fork feature on GitHub. The fork feature on GitHub would show on the UI of repo2 a link to the original repo. According to the article I linked above, I think you cannot have that effect. If you want to bring attention to the existence of these two repos, and how to use them, I think your best option is to document it.

like image 163
janos Avatar answered Nov 09 '22 13:11

janos