背景

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

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

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

而在这个过程中,原库房的代码经常会变化,而 GitHub 不会帮咱们主动同步原库房的代码,咱们不确保自己修正的代码是否是最新的。因而咱们就面对这样的一个问题:“Github 进行 fork 后的库房,怎么与原库房同步?”

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

解决方法

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

  1. 第一步,进去自己的库房,切换到Settings页签
    Github进行fork后的仓库,如何与原仓库同步?
  2. 第二步,页面滑到最下面,点击Delete this repository,进行二次确认即可删去
    Github进行fork后的仓库,如何与原仓库同步?
  3. 第三步,再次去 fork 一次原库房

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

  1. 第一步,查看当时的上游代码库
$ git remote -v # 查看当时的上游代码库
origin  https://github.com/AFine970/weekly.git (fetch)
origin  https://github.com/AFine970/weekly.git (push)
  1. 第二步,再设置一个上游代码库,为 fork 的库房地址
$ git remote add upstream https://github.com/IDuxFE/weekly.git # 再设置一个上游代码库
$ git remote -v
origin  https://github.com/AFine970/weekly.git (fetch)
origin  https://github.com/AFine970/weekly.git (push)
upstream        https://github.com/IDuxFE/weekly.git (fetch)
upstream        https://github.com/IDuxFE/weekly.git (push)
  1. 第三步,拉取新设置的上游代码库
$ git fetch upstream # 拉取新设置的上游代码库
  1. 第四步,切换本地分支到 main 分支
$ git checkout main # 切换本地分支到main分支
  1. 第五步,拉取或兼并长途分支到本地分支
# 运用Pull拉取分支
$ git pull --rebase upstream main # 将上游库房的main分支通过rebase的方式拉取到本地main分支
# 或许运用Merge
$ git merge upstream main # 运用Merge会多一条merge commit,而pull --rebase不会有
  1. 第六步,将本地的分支推送到自己的长途库房
$ git push origin main # 再将本地的分支推送到自己的长途库房

总结

上述两种方法,都能很好的解决Github进行fork后怎么与原库房同步问题。第一种方法最暴力,也最直接;第二种方法可持续性,设置了 fork 库房的上游代码源之后,后续都可以通过第六步进行代码同步更新。

如果你有什么更好的方法,欢迎在评论区讨论

最终,好好学习不会差!我是 970,咱们一起进步