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. amazeui学习笔记--css(常用组件11)--分页Pagination

    amazeui学习笔记--css(常用组件11)--分页Pagination 一.总结 1.分页使用:还是ul包li的形式: 分页组件,<ul> / <ol> 添加 .am-p ...

  2. StringBuilder和String的区别

      使用   StringBuilder 语言 C# String   对象是不可改变的.每次使用   System.String   类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为 ...

  3. Android 解决RecyclerView删除Item导致位置错乱的问题

    RecyclerView的刷新分为内容变化和结构变化,结构变化比如remove和insert等并不会导致viewholder的更新,所以有时候我们使用 notifyItemRemoved(positi ...

  4. Loadrunner--运行场景报Socket descriptor not found错误

    今天早上在使用LoadRunner时,报了如下的错误,开始并未看错误以为是录制问题引起,就重新录制了一遍,简单施压看看错误是否还有,结果错误仍然有,如下所示: Error: Socket descri ...

  5. Android ListView带CheckBox实现单选

    第1种方法: 首先是我们的bean: public class Bean { private boolean isChecked; private String msg = "这是一条测试数 ...

  6. php对xml进行简单的增删改查(CRUD)操作

    假如有以下xml文件: <?xml version="1.0" encoding="UTF-8"? > <setting>     &l ...

  7. C标签的使用.md

    <c:set> 设置变量 <c:set var="a" scope="request" value="${'www'}"/ ...

  8. POJ 1012 Joseph 约瑟夫问题

    http://poj.org/problem?id=1012 早上去图书馆复习苦逼的复习....万恶的数逻.T T我还要自我安慰的说复习完了奖励回来刷水题~ 10点多的时候外面校运会大吼撑杆跳的那个. ...

  9. css 单行图片文字水平垂直居中汇总

    (1) 水平居中 a. 行内元素水平居中 因为img是行内元素(行内块级元素也一样)父级元素设置text-align:center即可,例如: <div style="width: 6 ...

  10. Go语言实战_自己定义OrderedMap

    一. 自己定义OrderedMap 在Go语言中.字典类型的元素值的迭代顺序是不确定的.想要实现有固定顺序的Map就须要让自己定义的 OrderedMap 实现 sort.Interface 接口类型 ...