场景
在团队开发时,成员将repo fork到自己GitHub下进行开发,然后在个人GitHub repo中pull request将变动合并到团队repo中。当有成员改动团队repo时,我们需要将团队远程repo的变动同步到自己repo中。
解决方案
解决上述问题有两个方案:
方案一
在GitHub网页上通过反向pull request将变动pull到自己远程repo(常规下我们是将自己远程repo pull request到团队远程repo,原理相同,我们pull什么就将什么当做base),通过compare across forks来调节同步地repo分支。
If you need to, you can also compare across forks
方案二
另一个方法是,我们通过本地repo直接同步团队的变动。
背后的原理是:在本地repo添加原始的仓库作为新的上游仓库,取名upstream(以区别forked仓库的origin),通过git pull --rebase upstream/master
将原始仓库master分支内容同步到本地仓库,i.e.,本地HEAD指针将会向前挪动,然后再通过git push origin master
将本地仓库的内容推送到forked的远程repo,即完成fork库与原始库的同步。
原始上游仓库origin:
$ git remote -v
origin git@github.com:xxx/yyy.git (fetch)
origin git@github.com:xxx/yyy.git (push)
添加上游仓库:
$ git remote -v
origin git@github.com:xxx/forked_repo.git (fetch)
origin git@github.com:xxx/forked_repo.git (push)
upstream git@github.com:yyy/repo.git (fetch)
upstream git@github.com:yyy/repo.git (push)
同步上游repo仓库
$ git pull upstream/master