git clone到本地的项目,如果远程仓库更新,需要将更新取回本地,并与本地的分支合并。有两种命令可以做到:
git fetch
git pull
这里主要是解决fork的远程项目更新之后,如何将最新版与本地合并。不涉及到多人协作开发。
首先要将远程主机关联,需要用到git remote
命令。
git remote
用于管理主机名。-v
可以查看主机网址。
$ git remote -v
origin https://github.com/****/boston_housing.git (fetch)
origin https://github.com/****/boston_housing.git (push)
这里的远程主机是自己的账号,如果是clone的别人的项目,还需要将作者的主机添加到远程主机中。
git remote add <主机名> <网址>
,主机名可以自己命名。
git remote rename <原主机名> <新主机名>
,用于更改远程主机的名字。
$ git remote add udacity https://github.com/nd009/boston_housing
$ git remote -v
origin https://github.com/****/boston_housing.git (fetch)
origin https://github.com/****/boston_housing.git (push)
udacity https://github.com/nd009/boston_housing (fetch)
udacity https://github.com/nd009/boston_housing (push)
git fetch
用于将远程主机的更新取回本地,完成更新还需要结合git merge
使用。
$ git fetch udacity master # 从远程udacity的master主分支下载最新版本
$ git log -p master..udacity/master # 比较本地master分支和udacity/master的差别
$ git merge udacity/master # 进行合并
具体显示如下:
$ git fetch udacity master
remote: Counting objects: 3, done.
remote: Total 3 (delta 2), reused 2 (delta 2), pack-reused 1
Unpacking objects: 100% (3/3), done.
From https://github.com/nd009/boston_housing
* branch master -> FETCH_HEAD
* [new branch] master -> udacity/master
到目前只是保存了远程主机master分支的信息,并没有进行合并。可以用cat .git/FETCH_HEAD
查看 FETCH_HEAD 的内容。
最后用git merge
或 git rebase
命令,在本地分支上合并远程分支。
$ git merge udacity/master
# 或者
$ git rebase udacity/master
git pull
命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。
$ git pull <远程主机名> <远程分支名>:<本地分支名>
git pull
就等同于 git fetch
+ git merge
。没法选择怎么合并。