Github上我们经常fork其他人的代码,然后经过一通魔改后弄出"自己"的东西。但是现在我遇到了这么一个需求,就是我已经公开了一个自己的库(暂且叫parent),然后我想基于自己开发的库再创建新的功能,但是又不想让新功能公开,一个很自然的想法是库parent保持公开,然后新创建一条分支隐藏,可惜的是github并不支持这个功能。所以一个可行的办法就是fork自己的库,但是不是直接fork,因为你也没法fork自己的库,间接实现的方法如下:

1) 在github新建一个库child,然后clone到本地

$ git clone https://github.com/your_name/child.git

注意,一个比较重要的概念是github的分支分为本地端和远端,我们先看一下两端的分支情况

  • 查看本地分支情况: 输入git branch命令,可看到输出结果如下。本地只有一个名为master的主分支
*master
  • 查看远端分支情况,输入git remote -v命令,输出结果如下。可以看到只有一个名为origin远端主分支,其中fetch和push表示不同操作,前者是“拿来”意思,也就是同步到本地,后者是“推送”,即将本地代码同步到远端。
origin  https://github.com/your_name/child_test.git (fetch)
origin https://github.com/your_name/child_test.git (push)

2) 将parent分支加入到远端分支

cd child
git remote add upstream https://github.com/your_name/parent.git

上面代码的意思是给child库的远端加上一个名字为upstream的分支,该分支路径则是你想要fork的库的路径。

我们可以输入git remote -v查看现在远端分支的情况

origin   https://github.com/your_name/child_test.git (fetch)
origin https://github.com/your_name/child_test.git (push)
upstream https://github.com/your_name/parent_test.git (fetch)
upstream https://github.com/your_name/parent_test.git (push)

3) 将远端分支同步到本地

第2步只是远端分支进行了fork,真正要使用代码,我们还需要把upstream远端分支同步到本地,方法如下:

git pull upstream master

如果你遇到了fatal: refusing to merge unrelated histories报错信息,可以加上--allow-unrelated-histories,即

git pull upstream master --allow-unrelated-histories

这样远端parent代码就同步到里新创建的child库了。如果你想要和parent保持一致,可以通过上面的pull方法实现,也可以通过fetch+merge的方式。

简单解释就是:

  • git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。
  • git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。

4) 将修改后的代码同步到远端

这里的远端分为被克隆的parent(即upstream)和child(即origin)。

  • 同步到origin:
git push origin master
  • 同步到upstream:
git push upstream master

当然,如果你不想child影响到parent,你可以在parentsettings/branches里设置Branch protection rules,勾选Require pull request reviews before merging。这样即使你不小心运行了上面的命令也不会将代码同步到upstream

MARSGGBO♥原创

如有意合作,欢迎私戳

邮箱:marsggbo@foxmail.com



2019-12-19 15:01:40

如何fork自己的github库?的更多相关文章

  1. 给你的博客加上“Fork me on Github”彩带

    起 如今,随着Git的大热以及Github的优越性,许多知名开源项目都将源代码托管到Github上了.在Github上不仅可以托管自己的开源项目,还可以Fork人家的源代码,给自己感兴趣的项目评价(s ...

  2. 博客加上“Fork me on Github”彩带

    给你的博客加上“Fork me on Github”彩带 起 如今,随着Git的大热以及Github的优越性,许多知名开源项目都将源代码托管到Github上了.在Github上不仅可以托管自己的开源项 ...

  3. git使用之如何将github库下载到本地与如何将代码上传github

    git使用之如何将github库下载到本地与如何将代码上传github ---------------------------------------------------------------- ...

  4. 给博客添加fork me on github图标

    首先挑选想要的图标样式 https://blog.github.com/2008-12-19-github-ribbons/ 效果和代码如图 打开博客后台设置,页首html设置 讲网页右边的代码粘贴过 ...

  5. 页面: Fork me on GitHub

    一.实现效果如下: 二.代码地址:https://github.com/blog/273-github-ribbons 这是一个国外网友开发的代码, 里面有很多种样式,可以自已随心选择. 三.我们只拿 ...

  6. Fork me on GitHub

    <a href="https://github.com/yadongliang"><img style="position: absolute; top ...

  7. 给你的博客加上“Fork me on Github”彩带(转)

    给你的博客加上“Fork me on Github”彩带 https://www.cnblogs.com/Leo_wl/p/3608794.html https://github.blog/2008- ...

  8. fork me on github 彩带设置无效

    挑选彩带地址: https://github.com/blog/273-github-ribbons 发现代码复制粘贴过来,但是在自己博客园上无效,如粘贴如下代码 <a href="h ...

  9. Git 创建版本库并实现本地上传数据到GitHub库

    版本库又叫做仓库,其实也是一个目录,这个目录里的所有文件都是被Git管理着,对每个文件的修改,删除,Git都会进行记录,方便我们对其进行跟踪. 因为本地是window环境,我们先从官网下载好windo ...

随机推荐

  1. 28.Java基础_抽象类

    抽象类的成员特点 public abstract class Animal { private String name; private int age; public Animal() { } pu ...

  2. Vue项目开发前的准备工作,node的安装,vue-cli的安装

    一.安装node 1-  点击这里进入node官网下载 2- 3- 下载完成是这样的 4-  双击打开进行安装,一路next,安装完成是这样 5-  打开cmd进入安装node的文件夹,输入node ...

  3. 浅谈C++ STL stack 容器

    浅谈C++ STL stack 容器 本篇随笔简单介绍一下\(C++STL\)中\(stack\)容器的使用方法和常见的使用技巧. stack容器的概念 \(stack\)在英文中是栈的意思.栈是一种 ...

  4. gradle是什么

    Gradle是JVM生态下又一款开源的自动化构建工具,以基于Groovy的DSL描述构建过程,在结合了ant和maven的优点的基础上,提供了更为简洁,灵活和高效的build体验. Task代表了构建 ...

  5. node启动服务后,窗口不能关闭。pm2了解一下

    在做项目时,遇到一个问题. 项目中要和一个3D模型做交互,而做模型的人,给了一个 js 文件.需要在node环境下,使用vscode调试功能启动的. 而我们使用或者调试的时候,喜欢使用命令咋办? 使用 ...

  6. 强大的性能监测工具dstat

    强大的性能监测工具dstat 本节分为以下几个部分: dstat介绍: dstat命令是一个用来替换vmstat.iostat.netstat.nfsstat和ifstat这些命令的工具,是一个全能系 ...

  7. 优雅的解决springboot Aop @Cacheable this不生效

    问题描述:在同一个类中springAop不生效,例如在同一个类中没有 @Cacheable的方法调用本类有 @Cacheable的方法,则缓存不会设置. 原因:springaop基于java prox ...

  8. 修改Hexo自动生成的HTML文件名

    导读 我们在使用Hexo框架生成静态博客时,其实是将你写好的.md文件输出成HTML文件进行渲染,其中HTML的文件名称就是.md的文件名称. 而我们为了编辑文章方便,为了通过文件名就知道这是哪篇文章 ...

  9. docker命令之link

    1.新建两台容器,第二台(busybox_2)link到第一台(busybox_1) [root@localhost ~]# docker run -d -it --name busybox_1 bu ...

  10. Solr单机版的安装与使用

    .使用Solr实现. 基于Solr实现站内搜索扩展性较好并且可以减少程序员的工作量,因为Solr提供了较为完备的搜索引擎解决方案,因此在门户.论坛等系统中常用此方案. .什么是Solr. Solr是A ...