github中fork分支和pullrequest的最佳实践

*/-->

code {color: #FF0000}
pre.src {background-color: #002b36; color: #839496;}

github中fork分支和pullrequest的最佳实践

最近在参与一个国外的github开源项目,遇到自己fork了源库,一段时间之后,源库已经更新了一些内容,这样,自己fork的版本就落后于源库了。那怎么才能与源库保持同步呢?
youbute上一个教学视频讲得非常清楚:
https://www.youtube.com/watch?v=M7ZYkjOWr6g

我这里用文件记录一下,方便以后参阅和查找:
首先,假设有一个远程的repository:
https://github.com/ensime/ensime-server.git

  • 我们需要在界面上,点击右上角的“Fork”,复制一个仓库到自己的github账号下。
  • 然后,把自己账户下到远程仓库复制到本地:
    git clone https://github.com/yangwen0228/ensime-server.git
    git remote add upstream https://github.com/ensime/ensime-server.git
    git remote -v

    =>

    origin  https://github.com/yangwen0228/ensime-server.git (fetch)
    origin https://github.com/yangwen0228/ensime-server.git (push)
    upstream https://github.com/ensime/ensime-server.git (fetch)
    upstream https://github.com/ensime/ensime-server.git (push)
  • pull request
    毕竟,我们fork仓库就是需要做贡献。这时,我们就要做本地checkout一个新到分支,然后在新到分支里面做修改,保持fork到自己github仓库的主分支永远只用于与upstream的仓库进行同步,任何修改都只是在自己新开的临时分支中进行,进行pull request时也使用临时分支,这样当upstream中有冲突时,只需要使用本地主分支与upstream分支进行rebase同步。这样,本地的主分支永远与upstream的主分支是同步的。而此时,再把临时分支和本地主分支进行一个rebase同步,将conflict修改好,再push。

    这个过程细化一下是这样的(我这里master主分支是2.0,一般情况下,默认是master):

    1. 检查当前的分支:

      git branch
      

      =>

      * 2.0
      
    2. 创建一个新的临时分支:
      git checkout -b dev
      git branch

      =>

      2.0
      * dev
    3. 修改代码,修改完之后,需要把变化commit到这个分支里面
      git status
      git add .
      git commit -m "#122: some changes."
    4. 将临时分支上传到github:
      git push origin dev
      
    5. 在github上进行pull request
      如果一切顺利,那么到这里,远程到maintainer接受了你的pull request。那么,只需要使用本地主分支与upstream分支进行rebase同步,然后删除本地的dev分支即可。

      git push origin --delete dev # 删除github上的dev分支
      git branch -D dev # 删除本地dev分支
      git checkout 2.0
      git pull --rebase upstream 2.0
      git push
    6. 如果分支提交之后,远程upstream的分支进行了修改,这是最麻烦的。
      git checkout 2.0
      git pull --rebase upstream 2.0
      git checkout dev
      git rebase 2.0

      这时rebase后,有可能会有冲突,就需要手动把conflict修复掉。然后,

      git add .
      git rebase --continue
    7. 再将从upstream同步后的内存更新到github上:
      git push --force
      

      由于github上的commit顺序与本地不同,如果直接push需要merge,那就整个乱了。所以,需要使用–force直接覆盖掉github的。

Date: 2017-04-22 10:21

Author: WEN YANG

Created: 2017-07-29 Sat 20:34

Emacs 25.2.1 (Org mode 8.2.10)

Validate

github中fork分支和pullrequest的最佳实践的更多相关文章

  1. paip.提升性能--多核编程中的java .net php c++最佳实践 v2.0 cah

    paip.提升性能--多核编程中的java .net php c++最佳实践  v2.0 cah 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax ...

  2. Java 编程中关于异常处理的 10 个最佳实践

    异常处理是Java 开发中的一个重要部分.它是关乎每个应用的一个非功能性需求,是为了处理任何错误状况,比如资源不可访问,非法输入,空输入等等.Java提供了几个异常处理特性,以try,catch 和 ...

  3. github上fork分支后再合入原master分支的改动

    几个月前看到一个电商项目,文档比较全,fork下来学习下.后来因为其他事情耽搁了,现在想重新看看,发现改动比较大,master分支跟我fork下来的分支不一样了.咋办?简单,把最新的master分支下 ...

  4. .NET Core中使用Dapper操作Oracle存储过程最佳实践

    为什么说是最佳实践呢?因为在实际开发中踩坑了,而且发现网上大多数文章给出的解决方法都不能很好地解决问题.尤其是在获取类型为OracleDbType.RefCursor,输出为:ParameterDir ...

  5. 快速web开发中的前后端框架选型最佳实践

    这个最佳实践是我目前人在做的一个站点,主要功能: oauth登录 发布文章(我称为"片段"),片段可以自定义一些和内容有关的指标,如“文中人物:12”.支持自定义排版.插图.建立相 ...

  6. Java中处理异常的9个最佳实践

    Java中的异常处理不是一个简单的话题.初学者很难理解,甚至有经验的开发人员也会花几个小时来讨论应该如何抛出或处理这些异常. 这就是为什么大多数开发团队都有自己的异常处理的规则和方法.如果你是一个团队 ...

  7. 避免Java中NullPointerException的Java技巧和最佳实践

    Java中的NullPointerException是我们最经常遇到的异常了,那我们到底应该如何在编写代码是防患于未然呢.下面我们就从几个方面来入手,解决这个棘手的​问题吧.​ 值得庆幸的是,通过应用 ...

  8. GitHub中Fork来的仓库如何进行双向更新

    一.做点贡献 想对别人的某个仓库"做点贡献"怎么办? 1. Fork该仓库 首先Fork该仓库,本文以git-learn这个仓库为例 这样自己的账号下就会出现这样一个仓库 2. C ...

  9. github中fork的使用

    转载https://www.cnblogs.com/patchouli/p/6511251.html 由于git的权限控制功能比较弱,如果想给某个项目提供代码除了直接获得项目的push权限外,gith ...

随机推荐

  1. spring data jpa 使用方法命名规则查询

    按照Spring Data JPA 定义的规则,查询方法以findBy开头,涉及条件查询时,条件的属性用条件关键字连接,要注意的是:条件属性首字母需大写.框架在进行方法名解析时,会先把方法名多余的前缀 ...

  2. ES6/ES2015核心内容 import export

    ES6/ES2015核心内容:https://www.cnblogs.com/doit8791/p/5184238.html Javascript ES6学习 import export  https ...

  3. easyUI学习笔记一

    1.引用js文件 <script type="text/javascript" src = jquery-easyui/jquery.min.js> </scri ...

  4. 后端数据推送-EventSource

    服务器发送事件(以下简称SSE)是HTML 5规范的一个组成部分,可以实现服务器到客户端的单向数据通信.通过SSE,客户端可以自动获取数据更新,而不用重复发送HTTP请求.一旦连接建立,“事件”便会自 ...

  5. docker镜像仓库

    搭建私有镜像仓库 Docker Hub作为Docker默认官方公共镜像,如果想自己搭建私有镜像仓库,官方也提供registry镜像,使得搭建私有仓库非常简单. 下载registry镜像并启动 [roo ...

  6. spring 获取url参数

    1. usl格式: http://localhost:8080/contact/delete/3 java代码 @RequestMapping(value="/delete/{id}&quo ...

  7. jquery submit事件

    jquery submit 事件 $('#form').submit(function(){ if(true){ //do return true; }else{ //do return false; ...

  8. 【leetcode】974. Subarray Sums Divisible by K

    题目如下: Given an array A of integers, return the number of (contiguous, non-empty) subarrays that have ...

  9. JindoFS解析 - 云上大数据高性能数据湖存储方案

    JindoFS背景 计算存储分离是云计算的一种发展趋势,传统的计算存储相互融合的的架构存在一定的问题, 比如在集群扩容的时候存在计算能力和存储能力相互不匹配的问题,用户在某些情况下只需要扩容计算能力或 ...

  10. ceph cache pool配置

    https://my.oschina.net/hanhanztj/blog/515410 0.引入 本文介绍如何配置cache pool tiering. cache pool的作用是提供可扩展的ca ...