这个故事的起因是AI柠檬博主前段时间通过Fork方式给MinDoc开源项目代码仓提交了一个特性的Pull Request,待Owner合入了所有PR后,我这边还要继续通过我Fork的仓库给上游代码仓提交代码,Fork的仓库要跟上游代码仓同步一次。最笨的方法是删了已有的Fork仓库而重新Fork一个,但这显然不优雅,是不完美的方案。
你还别笑,AI柠檬还没实践过这种操作,毕竟,以前都是别人给我的GitHub仓库提交Pull Request的,我作为Owner只管Code Review并合入代码,但是提PR的人要考虑的就多了(雾)。于是本着优雅地追求完美的本心,搜寻最佳解决方法的资料并实践,您别说,还真的行。
教学步骤实践
首先,请cd到你本地代码仓库的目录下:
PS D:\> cd D:\mindoc
执行命令查看远程仓库路径:
PS D:\mindoc> git remote -v origin git@github.com:nl8590687/mindoc.git (fetch) origin git@github.com:nl8590687/mindoc.git (push)
我们看到,远程仓库地址只有我自己Fork的仓库地址,说明没有设置 upstream 上游代码仓,需要按照下面的步骤设置一次。一般情况下,设置好一次后就不用重复设置了,除非重新在其他计算机或者目录路径下通过 git clone 命令又重新克隆了一份代码仓。
执行命令如下:
PS D:\mindoc> git remote add upstream https://github.com/mindoc-org/mindoc.git
然后我们再次执行命令检查是否设置成功:
PS D:\mindoc> git remote -v origin git@github.com:nl8590687/mindoc.git (fetch) origin git@github.com:nl8590687/mindoc.git (push) upstream https://github.com/mindoc-org/mindoc.git (fetch) upstream https://github.com/mindoc-org/mindoc.git (push)
有类似带upstream的输出就说明设置成功了。然后我们最好先查看本地是否有未提交的修改,如果有,最好先提交了,然后推送代码到我们自己Fork的GitHub仓库里。虽然这一步不是必须,但如果有修改过任何代码,建议最好执行,可以避免很多麻烦事。
关键步骤:进行fetch 和 merge
PS D:\mindoc> git fetch upstream
如果当前位于其他分支的话,需要切换到master分支(或者是main分支)。
PS D:\mindoc> git checkout master
然后,合并远程master分支(或者是main分支):
PS D:\mindoc> git merge upstream/master
最后,将本地所有分支推向自己Fork的代码仓库即可:
PS D:\mindoc> git push
然后,我们就可以再次放心地向上游仓库继续提Pull Request了。
写在最后
本文是AI柠檬博主跟着下面这位老师的教程提炼总结的干货,因为觉得原帖内容太过“丰富”了,并且有在逛“贴吧”的感觉。如果您想详细了解和讨论,可以考虑去看下原帖:
https://github.com/selfteaching/the-craft-of-selfteaching/issues/67
版权声明本博客的文章除特别说明外均为原创,本人版权所有。欢迎转载,转载请注明作者及来源链接,谢谢。本文地址: https://blog.ailemon.net/2024/11/10/the-best-way-to-sync-github-fork-repo-from-upstream/ All articles are under Attribution-NonCommercial-ShareAlike 4.0 |