gitlab或github下fork后如何同步源的新更新内容?

gitlab或github下,a开发者fork了b开发者的项目后,如果b开发人员更新代码后,a开发者如何获得更新? 或者推荐一个满足该场景的工作流。不…
关注者
383
被浏览
549,226

19 个回答

Configuring a remote for a fork
Syncing a fork

上面两个链接是GitHub官方的帮助文档中关于fork同步的说明。

如果你懒得看英文,写可以看我的博客:

同步一个 fork

--------------------------

简单的说就是:

  • 给fork配置远程库
    • 使用
      git remote -v
      查看远程状态
    • 确定一个将被同步给 fork 远程的上游仓库

      git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
    • 再次查看状态确认是否配置成功。

  • 同步fork
    • 从上游仓库 fetch 分支和提交点,提交给本地 master,并会被存储在一个本地分支 upstream/master

      git fetch upstream
    • 切换到本地主分支(如果不在的话)

      git checkout master
    • 把 upstream/master 分支合并到本地 master 上,这样就完成了同步,并且不会丢掉本地修改的内容。

      git merge upstream/master
    • 如果想更新到 GitHub 的 fork 上,直接

      git push origin master

      就好了。

2021年5月8日更新:难道github也有人上知乎?我发现现在github增加了一键把原始仓库同步到自己的fork的功能。即下图中的鼠标指向的“Fetch upstream”功能!


原来的方法依然有效:

在github网页上点几下(pull request功能)即可达到的你的目的。

举个栗子:

a开发者: JiaoXianjun / openwifi

b开发者: open-sdr/openwifi

a开发者(你)想要同步b开发者的最新更新。

1。a开发者打开自己的页面:(注意看鼠标停在pull request那了)

2。a开发者点击Pull request。此时默认的同步方向是把a(你)的工作同步给b,这不是你想要的功能。

别急,往下看。

3。 鼠标点击右边,选择为b的仓库。

4。此时得到下图,两边都是b的,这仍旧不是你想要的。好在快了,看我鼠标停在了compare across forks。

5。点击compare across forks,然后我们就接近了。此时,左边右边都会变成b的

6。将左边选为a(你)的

7。此时如果github对比了b和a的,认为b比a有更新,则会出现下面的页面。看我鼠标停在哪。

8。点击Create pull request,出现下面页面。这就是把b同步给a的pull request。再次看我鼠标停在哪。

9。继续点击Create pull request。这是生成一个面向a的pull request。a(你)只需要批准。看我鼠标停在哪。

10。a(你)点击Merge pull request,然后Confirm merge

11。b同步给a的目标达成!