通常本地git仓库只对应一个远程仓库,但是当我们从别的项目fork时,就会同时出现多个远程仓库,此时若要与官方保持同步,一般的做法是增加多个远程仓库,通过定期merge的方式以获得官方最新的功能。
举个栗子:https://github.com/StevenX911/33-js-concepts
我从别的同志fork过来的,并拉到本地,操作如下:
git clone https://github.com/StevenX911/33-js-concepts & cd 33-js-concepts
此时执行git branch -a
,本地仅显示我自己的本地仓库和远程仓库
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
注意此时远程仓库名为origin
我们增加官方仓库为本地另一个仓库,起名为upstream
git remote add upstream https://github.com/stephentian/33-js-concepts.git
再次执行git branch -a
,输出结果如下:
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
咦!没变化,哪里不对呢?原来上述命令仅完成远程仓库设置,需要执行git pull upstream
才能拉取新仓到本地。
注意pull时需要显式指定远程仓库名称
再执行git branch -a
,输出结果如下:
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/upstream/master
接下来我们需要将官方仓库合并支本地master即可完成本地master更新,命令如下:
$ git pull upstream master
From https://github.com/stephentian/33-js-concepts
* branch master -> FETCH_HEAD
Updating 12d66f1..a7fe65e
Fast-forward
.gitignore | 1 +
.travis.yml | 3 +++
README.md | 46 ++++++++++++++++++++++++++++++++++------------
package.json | 8 ++++++++
4 files changed, 46 insertions(+), 12 deletions(-)
create mode 100644 .gitignore
create mode 100644 .travis.yml
create mode 100644 package.json
最后将 master 推送自己的远程仓库,完成更新,注意显式指定远程分支名称origin
$ git push origin
Enumerating objects: 75, done.
Counting objects: 100% (75/75), done.
Delta compression using up to 4 threads
Compressing objects: 100% (71/71), done.
Writing objects: 100% (73/73), 14.57 KiB | 2.91 MiB/s, done.
Total 73 (delta 27), reused 0 (delta 0)
remote: Resolving deltas: 100% (27/27), completed with 1 local object.
To https://github.com/StevenX911/33-js-concepts.git
12d66f1..a7fe65e master -> master
(全文完)
评论