Get newest code from original repo

Clone 开源项目后,在本地进行了修改,并提交到了自己的远程repo,如何从原 git 仓库获取最新的代码并 push 到自己的 repo。

场景

从 Github 上看到了一个开源项目,想自己部署,但是由于项目代码中的配置文件需要某软件的账号和 token,而原仓库中由于是开源项目所以是一个公用的账号,而自己部署的话肯定还是得用自己的,这里我选择使用私有仓库,一定程度上防止 token 泄漏。

因为 Fork 后的仓库不能设为私有,我只能先将代码拉取到本地:

1
git clone https://github.com/Stitchpunk/atari-ai.git test

在 Github 上建一个私有仓库,如:test.

在本地仓库中将远程仓库 origin 改为自己私有仓库的地址:

1
2
3
4
5
6
7
$ cd test
$ git remote -v # check remote repo address
origin [email protected]:hunterMG/test.git (fetch)
origin [email protected]:hunterMG/test.git (push)
$ git remote remove origin # remove remote repo
$ git remote add origin [email protected]:hunterMG/test.git # add remote repo of yourself
$ git push -u origin master # push code to your remote repo

这时候就可以在本地写代码,提交到本地仓库,再 push 到 Github 之后结合一些 CD/CI 的方法部署了。

原 repo 更新代码后如何更新自己的repo

几天之后新的问题来了:原开源仓库更新了新的 feature ,我想加到自己的仓库里,因为不是直接用 Github 的 Web 端 Fork 的仓库,所以不能用这篇Github中进行fork后,原仓库更新了如何与原仓库同步里提到的方法(直接在 Web 端发起 PR 从原仓库更新)。

然后看到了这个:GIT - 拉取其他仓库的某个分支的代码, 感觉差不多,试试还真行。

  1. 添加远程 repo,

    1
    git remote add Stitchpunk https://github.com/Stitchpunk/atari-ai.git
  2. 拉取远程 repo 信息:

    1
    git fetch Stitchpunk
  3. 新建并切换到分支:

    1
    git checkout -b mergeStitchpunk #or git switch -c mergeStitchpunk
  4. 合并最新的代码,解决冲突:

    1
    git merge Stitchpunk/master

更新自己 repo 主分支的代码

  1. 切换到 master 分支

    1
    git checkout master #or git switch master
  2. 合并分支

    1
    git merge mergeStitchpunk
  3. 删除临时分支(optional)

    1
    git branch -d mergeStitchpunk

不过现在看来好像可以在第 4 步时直接切换到 master 分支,将代码直接合并到 master 上。😂

Reference

Github中进行fork后,原仓库更新了如何与原仓库同步

GIT - 拉取其他仓库的某个分支的代码

创建与合并分支