• home > tools > versionControl > git >

    Github进行fork后如何与原仓库同步:fork分支如何追新与提交

    Author:zhoulujun Date:

    Fork代码,如果源项目更新,我们如何同步呢?

    非常详细的,请阅读《Github进行fork后如何与原仓库同步》,此篇是具体方法的总结。


    在做开源项目时候,我们一般没有直接建立分支权利的。一般是Fork代码,然后同步提交到源项目,让其合并自己的新提交。

    如果源项目更新,我们如何同步呢?

    最省事的同步办法可能是:

    1. 在你fork的仓库setting页翻到最下方,然后delete这个仓库;

    2. 然后重新fork xiaolai 的仓库,并 git clone 到你的本地。

    有时候,你需要用到这个省事的办法,比如 xiaolai 的仓库再次整理了 commit。

    在更多情况下,删掉自己fork的库,应该是你的最后选择,而不应该是首选。

    如何优雅的获得上游最新内容?

    首先, 新增 remote (远程上游仓库), 即, 将本书仓库, 追加为 fork 仓库的上游仓库

    本地代码添加源仓库地址

    1. 添加源分支 URL ( 添加一个远程库 名字不能是origin,一般命名为upstream。当然,可以随意  )

      git remote add upstream [源项目 URL]

    2. 查看所有远程库的远程地址

      git remote -v

      git remote -v
      origin   git@gitlab.test.com:zhangsan/project.git (fetch)
      origin   git@gitlab.test.com:zhangsan/project.git (push)
      upstream git@gitlab.test.com:WP/develop/project.git (fetch)
      upstream git@gitlab.test.com:WP/develop/project.git (push)
    3. 从源分支获取最新的代码。

      git fetch upstream

      git fetch upstream staging:staging

      当然也可以吧分支pull 到本地。

      git pull upstream 远程分支名:本地分支名

    同步fork

    1. 同步资源

      git fetch upstream

    2. 切换到主分支

      git checkout master

    3. 合并本地分支和源分支

      git merge upstream/master

      一般建议,选择rebase。具体参看《git中merge还是rebase?git之圣战merge vs rebase

      git rebase upstream/master

    4. Push 到 Fork 分支

      git push

      git push origin master:master

    或者直接搞定

    git push -u origin master

    如果想提交到源分支。就直接在源分支,发起MR。代码合并,让管理员通过合并即可

    直接强制同步源仓库(upstream)

    git fetch upstream && git reset --hard upstream/master && git push -f

    git push -f确实是很粗暴,这种方法也只适用于不用保存自己的版本的情况而已

    git push -f 其实也不是很可取的方案,虽然比直接删除仓库强。真不怕初学者习惯了,然后用这招破坏掉多人协作库么,为了防止这种情况,企业内部gitlab我都默认master分支不允许 git push -f

    直接强制同步源仓库(upstream)

    1. 备份自己的改动(可以选择用一个新的分支或者直接将问题复制到本地存储的其他文件目录)

    2. 添加远程主仓库为自己本地仓库的一个 upstream(如命名为 origin),使用以下命令强制同步

    3. git fetch origin && git reset --hard origin/master && git clean -f -d

    4. 将自己的改动应用到强制同步过的分支,如果使用的其他分支备份,可以使用 rebase 命令合并过来,如果有冲突,处理冲突

    5. 检查自己的 commits 是否正确合理,无问题则可重新提交 PR


    同行写的不错的文章:

    Git-fork分支整理 https://sheltonliu.github.io/2017/12/04/git-fork-knowledge/



    转载本站文章《Github进行fork后如何与原仓库同步:fork分支如何追新与提交》,
    请注明出处:https://www.zhoulujun.cn/html/tools/VCS/git/8644.html