Fork一个别人的repository,做了一些改动,想提交pull request的时候,发现原先别人的repository已经又有了一些更新了,这个时候想使得自己fork出的repository也得到这些更新,即和原repository同步,该怎么做呢?这个问题应该被问烂了,stackoverflow上也有解答,基本上是指向的GitHub上的官方文档。最主要的是这2篇:

https://help.github.com/articles/configuring-a-remote-for-a-fork/

https://help.github.com/articles/syncing-a-fork/

本文略作翻译,以中文解答这个问题。

首先,检查一下当前的配置,看看当前有没有已经设置了上游,这要使用 Git remote -v 命令。如下:

  1. $git remote -v
  2. origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
  3. origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)

以上表明,origin这个repository对应的是远端的https开头的这个链接指向的repository,即自己fork出的repository.

第二步,将原repository设置为自己fork出的repository的上游(upstream)。运用如下的命令:

  1. $git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git

运用第一步中提到的git remove -v命令再次检查一下,结果如下:

  1. $git remote -v
  2. origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
  3. origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
  4. upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
  5. upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)

第三步,运行 git fetch upstream 命令,如下:

  1. $git fetch upstream
  2. remote: Counting objects: 75, done.
  3. remote: Compressing objects: 100% (53/53), done.
  4. remote: Total 62 (delta 27), reused 44 (delta 9)
  5. Unpacking objects: 100% (62/62), done.
  6. From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY
  7. * [new branch]      master     -> upstream/master

以上表明,远程的原repository上确实有一些更新,现在它们已经被download到本地的.git文件夹下了,但是还没有合并到本地的代码中。

第四步,git checkout master,这是保证切换到本地的repository的master上,如果本来就在,那么这一步不是必须的。

第五步,运行 git merge upstream/master 命令,将upstream/master上的更新合并到本地的master上,其实就是将第三步中download到.git文件夹下的那些change合并到本地的master中。如下:

  1. $git merge upstream/master
  2. Updating a422352..5fdff0f
  3. Fast-forward
  4. README                    |    9 -------
  5. README.md                 |    7 ++++++
  6. 2 files changed, 7 insertions(+), 9 deletions(-)
  7. delete mode 100644 README
  8. create mode 100644 README.md

如果本地没有什么自己独立的更新的话,那么将执行"Fast-forward"的合并。如果本地有自己独立的更新,而又会引起冲突的话,则要解决冲突,再commit.

关于解决冲突,如果明确所有冲突都是使用upstream/master上的来override自己的,那么可以直接运行如下命令,则无需解决冲突了:

  1. git merge -X theirs upstream/master

注意,以上步骤结束后,仅仅是本地的fork出的repository和原repository取得了同步,如果想让远程的fork出的repository也同样取得同步,必须再git push上去。

http://blog.csdn.net/nirendao/article/details/51464191

git如何更新fork的repository(Fork一个别人的repository,做了一些改动,再合并别人的更新)的更多相关文章

  1. github上fork别人的代码之后,如何保持和原作者同步的更新

    1.从自己fork之后的版本库clone $  git clone -o chucklu https://github.com/chucklu/Hearthstone-Deck-Tracker.git ...

  2. Git 把码云上被fork项目源码merge到fork出来的分支项目

    Git 把码云上被fork项目源码merge到fork出来的分支项目 By:授客 QQ:1033553122 需求描述 被fork的项目有更新代码,希望把更新的代码merge到fork分支项目 解决方 ...

  3. Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突

    Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突 这篇是接着上篇分布式版本库--Windows下G ...

  4. 【Git】GitHub之多人开发一个项目

    首先我们要简单知道github跟Git的区别.git是版本控制工具, github是一个面向开源及私有软件项目的托管平台,也是程序员交流的地方. 接下来就开始讲怎么多人一起开发. 首先我们先拥有git ...

  5. svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录

    svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录 Windows下,svn服务器IP本来是内网一台服务器上 ...

  6. Swing中耗时任务需要另起新线程,这个新线程中更新GUI的操作仍需由EDT来做(转)

    最近调试程序时发现,点击某个界面时会出现卡死的情况,出现的频率还是比较频繁的. 再次出现卡死的情况后,利用jvisualvm查看线程的运行情况,dump操作之后发现线程间出现了死锁:Found one ...

  7. SAM 做题笔记(各种技巧,持续更新,SA)

    SAM 感性瞎扯. 这里是 SAM 做题笔记. 本来是在一篇随笔里面,然后 Latex 太多加载不过来就分成了两篇. 标 * 的是推荐一做的题目. trick 是我总结的技巧. I. P3804 [模 ...

  8. CentOS系统yum源使用报错:Error: Cannot retrieve repository metadata (repomd.xml) for repository: rpmforge.

    服务器上的yum突然不好使用,使用yum的时候报错如下:[root@bastion-IDC src]# yum list......Could not retrieve mirrorlist http ...

  9. centos安装epel源后,使用报错(Error: Cannot retrieve repository metadata (repomd.xml) for repository: epel. Please verify its path and try again)

    报错如下: Error: Cannot retrieve repository metadata (repomd.xml) for repository: epel. Please verify it ...

随机推荐

  1. 微信支付v2开发(1) 微信支付URL配置

    本文介绍微信支付申请时如何设置授权目录及URL. 在申请微信支付时,第一项就会碰到下图的配置. 下面就对这一设置进行讲解! 一.选择支付类型 目前有两种支付类型 JS API网页支付 Native原生 ...

  2. SpringMVC整合Shiro,Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能

    SpringMVC整合Shiro,Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能. 第一步:配置web.xml <!-- 配置Shiro过滤器,先让Shiro ...

  3. 百度糯米iOSclient登录BUG

    环境 设备:iphone5s 网络:WIFI App版本号: 操作步骤 1.进入登录界面 2.输入手机号 3.点击[获取验证码],等待接收验证码后 4.点击[X]退出登录界面 5.反复1-2-3,提示 ...

  4. jQuery常用的API

    1.jQuery给标签添加子元素(父子关系) jQuery对象.append("子"); 将div标签插入到ul标签之后 $("ul").append($('d ...

  5. 10.3、android输入系统_必备Linux编程知识_任意进程双向通信(scoketpair+binder)

    3. 任意进程间通信(socketpair_binder) 进程每执行一次open打开文件,都会在内核中有一个file结构体表示它: 对每一个进程在内核中都会有一个task_struct表示进程,这个 ...

  6. YUM查询软件信息

    我们常会碰到这样的情况,想要安装一个软件,只知道它和某方面有关,但又不能确切知道它的名字.这时yum的查询功能就起作用了.你可以用yum search keyword这样的命令来进行搜索,比如我们要则 ...

  7. @EnableAsync和@Async开始异步任务支持

    Spring通过任务执行器(TaskExecutor)来实现多线程和并发编程.使用ThreadPoolTaskExecutor可实现一个基于线程池的TaskExecutor.在开发中实现异步任务,我们 ...

  8. css3-11 如何实现2D动画

    css3-11 如何实现2D动画 一.总结 一句话总结:就是transform属性,属性值为1.translate()    2.rotate()    3.scale(),而这是哪个属性值是带参数的 ...

  9. 【2024】求X到Y之间的整数和

    Time Limit: 3 second Memory Limit: 2 MB [问题描述] 计算X到Y之间的整数和(要求用函数实现).注意输入时X不一定小于Y,且X.Y不一定都是整数. [输入] 两 ...

  10. 几种常见web 容器比较 (tomcat、 jboss 、resin、 weblogic、 websphere、 glassfish)(转)

    点击打开PDF下载链接 web 容器比较 tomcat jboss resin weblogic websphere glassfish 1. Tomcat是Apache鼎力支持的Java Web应用 ...