文章

fork仓库的代码如何同步主仓库代码

1.背景

我fork了一份 jekyll-theme-chirpy 仓库的代码(基于 jekyll 的自建博客仓库,可以免服务器),我需要在上面更新我的博客文章,但是我又想一直同步 jekyll-theme-chirpy 仓库的新功能,这样我可以更新自己的博客功能。所以我就需要定期同步 jekyll-theme-chirpy 仓库的代码。

2.方法一:删除旧的fork仓库,重新fork,将需要的代码拷贝进新fork的仓库

这种办法太繁琐,且容易出错,一般不推荐使用,除非你不怕麻烦

  • 进入fork仓库,点击 tab 页的Settings,将页面滑到最底下,找到 Delete this repository 按钮,点击它进行删除仓库
  • 重新 fork 原始仓库,并 clone 到你的本地
  • 将需要的代码拷贝进新的fork仓库
  • 提交commit,将fork仓库推送至github

3.方法二:merge原始仓库代码

3.1.进入本地fork仓库,执行git remote -v查看远程仓库路径

1
2
3
git remote -v
# origin  git@github.com:rookie-luochao/rookie-luochao.github.io.git (fetch)
# origin  git@github.com:rookie-luochao/rookie-luochao.github.io.git (push)

执行git remote -v显示只有名为 origin 的两行路径,说明你未设置upstream(上游代码库)

3.2.设置upstream

使用git remote add upstream将原始仓库设置为fork仓库的upstream,然后在执行git remote -v查看

1
2
3
4
5
6
7
git remote add upstream git@github.com:cotes2020/jekyll-theme-chirpy.git

git remote -v
# origin  git@github.com:rookie-luochao/rookie-luochao.github.io.git (fetch)
# origin  git@github.com:rookie-luochao/rookie-luochao.github.io.git (push)
# upstream        git@github.com:cotes2020/jekyll-theme-chirpy.git (fetch)
# upstream        git@github.com:cotes2020/jekyll-theme-chirpy.git (push)

执行git remote -v显示多了名为 upstream 的两行路径,说明已经设置好upstream

3.3.检查本地改动信息

执行git status检查本地是否有改动信息,如果有改动信息,请提交commit

3.4.拉取 upstream 代码

建议fork仓库将所有改动都合并到 master 分支,然后再去同步 upstream 的 master 分支代码 执行以下命令拉取 upstream 代码

1
2
3
git fetch upstream
# 处理 delta 中: 100% (69/69), 完成 33 个本地对象.
# 来自 github.com:cotes2020/jekyll-theme-chirpy

3.5.合并 upstream 代码

执行以下命令合并 upstream 代码,如果有冲突,请解决冲突后再commit一次

1
2
3
4
5
git merge upstream/master

# 如果有代码冲突,请解决冲突后执行以下命令进行合并
git add .
git commit -m "fix: fix conflict"
一般情况下合并 upstream 代码肯定会有冲突,所以建议不要使用git pull --rebase upstream/master命令,因为解决冲突后使用git log查看 commit 记录会很奇怪

3.6.推送合并后的代码至远程仓库

执行以下命令将代码推送至远程仓库

1
git push
参考链接:the-craft-of-selfteaching/issues/67
本文由作者按照 CC BY 4.0 进行授权