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

  • 相关阅读:
    构建之法阅读笔记06
    构建之法阅读笔记05
    第九周进度条
    团队开发之个人博客九
    团队开发之个人博客八(4月27)
    无人机第二波
    团队开发之个人博客七
    无人机学习第一波
    团队开发之个人博客六
    第八周进度条
  • 原文地址:https://www.cnblogs.com/yangwen0228/p/6747483.html
Copyright © 2011-2022 走看看