之前的文章介绍了如何对本地仓库进行管理,并在本地创建了一个Git仓库。要参与一个git项目的写作,就必须了解如何管理远程仓库,接下来主要介绍如何进行远程仓库的管理。
1 在github创建远程仓库
登录github,有网站右上角找到"new repository"按钮,创建一个新的仓库
在Repository name中填写MyGitTest
,其默认即可,而后点击create repository,这样就创建了一个新的github远程仓库。在其中新建一个README.md
说明文件以及一个测试文键test_1
。
2 clone操作
从远程仓库克隆一个版本库到本地仓库,指令格式:
git clone 版本库地址
其中版本库地址支持多种协议:http(s)、ssh、git等
示例:
将上述创建的MyGitTest
版本库clone到本地:
$ git clone git@github.com:zhoushuo19/MyGitTest.git
3 remote操作
为了操作远程仓库,首先需要使用remote add
指令将远程仓库的url以及定义的别名添加到本地的远程仓库列表中。如下列出了,对远程仓库列表的操作指令:
git remote add alias url #添加远程仓库
git remote #列出所有远程仓库的别名
git remote -v #列出所有远程仓库的别名以及对应url
git remote rm alias #删除指定远程仓库
git remote rename old-alias new-alias #重命名
git remote set-url alias url #更新url
示例
执行如下指令,添加新的远程仓库:
$ git remote add origin git@github.com:user_name/MyGitTest.git #添加远程仓库
$ git remote -v #列出所有远程仓库
origin git@github.com:zhoushuo19/MyGitTest.git (fetch)
origin git@github.com:zhoushuo19/MyGitTest.git (push)
需要注意
1)如果本地版本库MyGitTest
是通过clone指令从远程仓库获取到的,那么在远程仓库列表中已经设置了别名origin与远程仓库url的对应关系,不需要再次执行git remote add origin ...
指令
2)上述指令中git@github.com:user_name/MyGitTest.git
就是远程仓库的网络地址,这里一定要将其修改为你自己的地址,不然你将无法将本地仓库推送到远程仓库。
4 fetch操作:
当远程仓库中有了更新(commit),需要将这些更新抓取到本地,这时就需要使用git fetch
指令。指令格式:
git fetch remote-name
上述命令会将远程仓库中的所有分支全部取回,并更新到本地对应的分支上。当仅需要从远程仓库取回某个分支时,就需要指定分支名,指令格式:
git fetch remote-name branch-name
远程分支对应的本地分支名的形式是:远程主机名/分支名,例如origin主机上的master分支,对应到本地,分支名就是origin/master。而后,我们就可以在本地访问该远程分支的所有分支:1)将其中某个分支合并到本地(merge);2)直接取出某个分支查看其中的内容(checkout)
示例:
1)在远程仓库MyGitTest
中添加一个test_2
文件,使用git fetch
指令将远程仓库取回到本地:
$ git fetch origin master
2)查看本地所有分支
$ git branch -a #查看本地所有分支
* master
remotes/origin/master
其中master
是当前的本地分支,remotes/origin/master
是远程分支在本地对应的分支
3)查看当前本地分支中的内容,而后检出获取到的远程分支,再次查看其中的内容
$ ls
README.md test_1
$ git checkout origin/master #切换到获取的远程分支
$ ls
README.md test_1 test_2
4)将获取的远程分支合并到本地分支
$ git checkout master #切换到本地分支
$ git merge origin/master #将获取的远程分支合并到本地分支
Updating 52bba6b..dbfe1cf
Fast-forward
test_2 | 1 +
2 files changed, 3 insertions(+)
create mode 100644 test_2
$ ls #查看内容
README.md test_1 test_2
5 pull操作
上述fecth
指令只是将远程仓库中的数据拉取到本地仓库,并不会将其合并到当前的工作分区,合并操作是需要后续使用merge
指令来进行合并的。
git pull
指令的功能是,抓取远程仓库的某个分支合并到本地仓库的指定分支上。这是比较常用的方式(至少我这么认为)。指令格式:
git pull remote-name remote-branch:local-branch
远程分支与当前分支进行合并时,指令格式:
git pull remote-name remote-branch
本地分支与远程分支之间,有一种追踪关系,比如在git clone时,本地分支默认与远程仓库的同名分支建立追踪关系,例如本地master分支自动追踪origin/master分支。如果当前分支与远程分支存在追踪关系,指令格式简化为:
git pull remote-name
如果当前分支只有一个追踪分支,那么主机名都可以省略:
git pull
示例
在github端修改test_1
文件,在本地执行执行如下指令,获取到远程仓库中的更新:
$ git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From github.com:zhoushuo19/MyGitTest
1e7813a..e3aca3c master -> origin/master
Updating 1e7813a..e3aca3c
Fast-forward
test_1 | 1 +
1 file changed, 1 insertion(+)
6 push操作
git push
是将本地分支的更新推送到远程仓库的指令,指令格式与git pull
指令类似:
git push remote-name local-branch:remote-branch
忽略远程分支,则表示将本地分支推送与之存在”追踪关系”的远程分支,如果该分支不存在,则新建该远程分支:
git push remote-name local-branch
如果忽略本地分支,则表示删除指定的远程分支:
git push remote-name :remote-branch
等同于
git push remote-name --delete remote-branch
如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略
git push remote-name
如果当前分支只有一个追踪分支,那么主机名都可以省略:
git push
示例:
修改本地仓库中的test_1
文件,并将该修改推送到远程仓库:
$ git add test_1 #添加文件到stage
$ git commit -m"update test_1" test_1 #提交到本地仓库
[master ed8cf15] update test_1
1 file changed, 1 insertion(+)
$ git push #推送到远程仓库
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 328 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:zhoushuo19/MyGitTest.git
e3aca3c..ed8cf15 master -> master