1.背景

我们在 GitHub 上参与到某个开源项目的时候,通常有以下开发步骤。

  1. fork 一份原仓库到我们自己的仓库中,
  2. 在自己的仓库中切新的分支进行开发,开发完成之后,再推送到自己的仓库
  3. 在原仓库进行Pull Request,等待审核人审核代码通过后,我们的分支就被合并到原仓库中

这是一个典型的 Github 开发流程

而在这个过程中,原仓库的代码经常会变动,而 GitHub 不会帮我们自动同步原仓库的代码,我们不确保自己修改的代码是否是最新的。因此我们就面临这样的一个问题:“Github 进行 fork 后的仓库,如何与原仓库同步?”

下面是给大家总结出来的解决方法

2.解决方法

2.1.方法一:删掉自己名下 fork 的仓库,再 fork 一次(最暴力也是最快的)

2.1.1.进去自己的仓库,切换到Settings页签

2.1.2.页面滑到最下面,点击Delete this repository,进行二次确认即可删除

2.1.3.再次去 fork 一次原仓库

2.2.方法二:设置上游代码库,拉取 GitHub 仓库最新代码后,在 Merge 或 Pull 到本地

2.2.1.看当前的上游代码库

1
2
3
git remote -v
origin git@github.com:khalidzk/hexo-theme-butterflyX.git (fetch)
origin git@github.com:khalidzk/hexo-theme-butterflyX.git (push)

2.2.2.再设置一个上游代码库,为 fork 的仓库地址

1
2
3
4
5
6
7
git remote add upstream git@github.com:jerryc127/hexo-theme-butterfly.git # 再设置一个上游代码库
git remote -v
origin git@github.com:khalidzk/hexo-theme-butterflyX.git (fetch)
origin git@github.com:khalidzk/hexo-theme-butterflyX.git (push)
upstream git@github.com:jerryc127/hexo-theme-butterfly.git (fetch)
upstream git@github.com:jerryc127/hexo-theme-butterfly.git (push)

2.2.3.拉取新设置的上游代码库

1
git fetch upstream

2.2.4.切换本地分支到 master 分支

1
git checkout master

2.2.5.拉取或合并远程分支到本地分支

1
2
3
4
# 使用Pull拉取分支
git pull --rebase upstream master # 将上游仓库的master分支通过rebase的形式拉取到本地master分支
# 或者使用Merge
git merge upstream master

使用Merge会多一条merge commit,而pull –rebase不会有

2.2.6.将本地的分支推送到自己的远程仓库

1
git push origin master

2.3.总结

上述两种办法,都能很好的解决Github进行fork后如何与原仓库同步问题。

  • 第一种方法最暴力,也最直接
  • 第二种方法可持续性,设置了 fork 仓库的上游代码源之后,后续都可以通过第六步进行代码同步更新