zoukankan      html  css  js  c++  java
  • github中fork分支和pullrequest的最佳实践

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

    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

  • 相关阅读:
    时间序列算法(平稳时间序列模型,AR(p),MA(q),ARMA(p,q)模型和非平稳时间序列模型,ARIMA(p,d,q)模型)的模型以及需要的概念基础学习笔记梳理
    Python两步实现关联规则Apriori算法,参考机器学习实战,包括频繁项集的构建以及关联规则的挖掘
    基于逻辑回归的利用欠采样处理类别不平衡的信用卡欺诈检测
    利用sklearn对MNIST手写数据集开始一个简单的二分类判别器项目(在这个过程中学习关于模型性能的评价指标,如accuracy,precision,recall,混淆矩阵)
    利用Sklearn实现加州房产价格预测,学习运用机器学习的整个流程(包含很多细节注解)
    Javax虚拟机-常见的JVM工具
    Java虚拟机-虚拟机字节码执行引擎
    Java虚拟机-虚拟机类加载机制
    Java虚拟机-类文件结构
    Java虚拟机-内存分配策略
  • 原文地址:https://www.cnblogs.com/yangwen0228/p/6747483.html
Copyright © 2011-2022 走看看