专栏首页35岁开始自学编程Github进行fork后如何与原仓库同步

Github进行fork后如何与原仓库同步

实在是……有太多人同时在帮忙修订错别字或优化 xiaolai 的 the-craft-of-selfteaching 了。如果你提交的 pull request 未被接受且得到回复说:“重新fork”,其实是你遇到一个问题:

  • 在你 fork 之后, xiaolai 的仓库又更新了;
  • 但 github 不会自动帮你把 xiaolai 的仓库 同步给你 fork 后的仓库;
  • 导致你提交 pull request 时的版本和 xiaolai 的版本不一致。

这个问题,用显得更“专业点”的说法,叫做:Github进行fork后如何与原仓库同步。那到底怎么做呢?

最省事的办法可能是:

  • 在你fork的仓库setting页翻到最下方,然后delete这个仓库;
  • 然后重新fork xiaolai 的仓库,并 git clone 到你的本地。

有时候,你需要用到这个省事的办法,比如 xiaolai 的仓库再次整理了 commit 。但在更多情况下,删掉自己fork的库,应该是你的最后选择,而不应该是首选。

和很多人一起向 xiaolai 提交 pull request,这实在是一个反复练习 merge (中文说法:合并,或版本合并)的机会。毫不夸张地讲,版本管理是软件工程极其重要的规范,也是极其基础的必备技能。而 merge 则是版本管理中最必须也最常用的场景。

那要不然,就多练练?以下是傻瓜版操作步骤,还细心配了截图,保管你从 0 也能上手。至于原理嘛,慢慢再搞懂吧。

merge前的设定

step 1、进入到本地仓库的目录。

下面所有操作,如无特别说明,都是在你的本地仓库的目录下操作。比如我的本地仓库为/from-liujuanjuan-the-craft-of-selfteaching

step 2、执行命令 git remote -v 查看你的远程仓库的路径:

如果只有上面2行,说明你未设置 upstream (中文叫:上游代码库)。一般情况下,设置好一次 upstream 后就无需重复设置。

step 3、执行命令 git remote add upstream https://github.com/selfteaching/the-craft-of-selfteaching.git 把 xiaolai 的仓库设置为你的 upstream 。这个命令执行后,没有任何返回信息;所以再次执行命令 git remote -v 检查是否成功。

step 4、执行命令 git status 检查本地是否有未提交的修改。如果有,则把你本地的有效修改,先从本地仓库推送到你的github仓库。最后再执行一次 git status 检查本地已无未提交的修改。

git add -A 或者 git add filename git commit -m "your note" git push origin master git status

注1:这一步作为新手,建议严格执行,是为了避免大量无效修改或文本冲突带来的更复杂局面。

注2:如果你已经在fork后的仓库提交了大量对 xiaolai 的仓库并没有价值的修改,那么想要pull request,还是重新回到本文最初的“最省事办法”吧。

merge 的关键命令

以下操作紧接着上面的步骤。

step 5、执行命令 git fetch upstream 抓取 xiaolai 原仓库的更新:

step 6、执行命令 git checkout master 切换到 master 分支:

step 7、执行命令 git merge upstream/master 合并远程的master分支:

step 8、执行命令 git push 把本地仓库向github仓库(你fork到自己名下的仓库)推送修改

如果担心自己不小心改了哪里,可以再次执行命令 git status 检查哪些文件有变化。这个操作仅是检查,不会改变任何状态,放心用。

现在你已经解决了fork的仓库和原仓库版本不一致的问题。可以放心向 xiaolai 发起 pull request 了。如果以上操作你花了不少时间,而 xiaolai 的仓库 又恰好更新了。很好,一次新的练习机会来了……

补记:这份笔记最初整理于2019年3月。或许因为我平时git操作仅是简单的修改新增,与其它仓库协作少,于是这种上游仓库的设置与同步相关指令需要用时,还是得搜到这篇笔记来看。那就发出来,或许也能帮到其他人吧~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 作死作死,完美主义,又“重写”了

    后来发现执行脚本变动比较频繁,需要反复执行dos转换为unix,于是做了一个DojobH,即支持脚本——包装了3条固定操作:

    刘娟娟PRESSone
  • 小结 python 实战中遇到的几种需要化名的情境

    笑来在《自学是门手艺》的《2.4.3 化名与匿名》中,讲到了函数的化名。经过几个月的实战,我发现,实际上化名无处不在。我有时也会称之为“别称”,意思一样。函数化...

    刘娟娟PRESSone
  • python 字符串替换功能 string.replace()可以用正则表达式,更优雅

    说起来不怕人笑话,我今天才发现,python 中的字符串替换操作,也就是 string.replace() 是可以用正则表达式的。

    刘娟娟PRESSone
  • tortoisegit安装与github上传

    git相关概念 如果没有版本控制? 备份多个版本,费空间 难于恢复之前的版本 容易引发bug 解决代码冲突困难

    河湾欢儿
  • eclipse插件创建本地git仓库

    由于我的eclipse是写书时最新版本,eclipse4.7版本,自带git,无需安装。既然我们本地机器里还没有任何仓库,在eclipse中选择 一个项目,右键...

    马克java社区
  • 分享一个不错的开源项目

    年初计划和朋友一起,利用周末和闲暇时间开发一个开源的项目,权当练手。全部使用最新控件、开发框架和设计思路。

    蜻蜓队长
  • Hexo博客进阶教程(二)| 使用Appveyor备份并持续集成博客

    使用hexo d命令部署Hexo博客时,在Github仓库上传的只是 public 文件夹中生成的页面内容,这样就带来了一些问题:

    Mculover666
  • 推荐好玩一些的GitHub项目27天成为Java大神c语言220个经典案例sublime text 优秀插件推荐为Linux一键安装好看的字体树莓派网易云音乐

    快速配置vim ? 快速配置vim 打开终端,执行下面的命令就自动安装好了: wget -qO- https://raw.github.com/...

    zhaoolee
  • 开源日志框架的原理与分析

    日志用于记录系统中硬件,软件,系统,进程和应用运行时的信息,同时可以监控系统中发生的各种事件,我们可以用它检查发生错误的原因,找到攻击者留下的攻...

    疯狂的KK
  • 2018 Wannafly summer camp Day8--区间权值

    区间权值 小Bo有nnn个正整数a1a1a_1……anana_n,以及一个权值序列w1w1w_1……wnwnw_n,现在她定义f(l,r)=(∑ri=la2...

    Enterprise_

扫码关注云+社区

领取腾讯云代金券