Git 远程仓库管理

来源:互联网 发布:linux命令大全解析 编辑:程序博客网 时间:2024/05/01 08:31

之前的文章介绍了如何对本地仓库进行管理,并在本地创建了一个Git仓库。要参与一个git项目的写作,就必须了解如何管理远程仓库,接下来主要介绍如何进行远程仓库的管理。

1 在github创建远程仓库

登录github,有网站右上角找到”new repository”按钮,创建一个新的仓库
create a 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               #列出所有远程仓库的别名以及对应urlgit 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)查看当前本地分支中的内容,而后检出获取到的远程分支,再次查看其中的内容

$ lsREADME.md  test_1$ git checkout origin/master   #切换到获取的远程分支$ lsREADME.md  test_1  test_2

4)将获取的远程分支合并到本地分支

$ git checkout master      #切换到本地分支$ git merge origin/master  #将获取的远程分支合并到本地分支Updating 52bba6b..dbfe1cfFast-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 pullremote: Counting objects: 3, done.remote: Compressing objects: 100% (2/2), done.remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0Unpacking objects: 100% (3/3), done.From github.com:zhoushuo19/MyGitTest   1e7813a..e3aca3c  master     -> origin/masterUpdating 1e7813a..e3aca3cFast-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
0 0