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


    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 命令。如下:

    [plain] view plain copy
     
    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)。运用如下的命令:

    [plain] view plain copy
     
    1. $git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git  

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

    [plain] view plain copy
     
    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 命令,如下:

    [plain] view plain copy
     
    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中。如下:

    [plain] view plain copy
     
    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自己的,那么可以直接运行如下命令,则无需解决冲突了:

    [plain] view plain copy
     
    1. git merge -X theirs upstream/master  


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

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

  • 相关阅读:
    博客
    参考博客
    KMP
    串匹配
    简单数论
    B
    各种常用函数的模板以及自己的测试数据
    header
    memcached的图形界面监控
    缓存策略
  • 原文地址:https://www.cnblogs.com/findumars/p/4740664.html
Copyright © 2020-2023  润新知