Git 实用教程(四)_远程仓库

我们在此使用 GitHub 作为远程仓测试,可先行注册账号并了解一下其简单操作。分布式控制系统强大之远程管理。此篇章含「九、git clone、git push、git pull 和 git fetch 详谈」

一、关联远程库

实际操作:

  1. 创建 SSH Key
//注:操作系统 Centos7,下同
[slashwan@study ~]$ ssh-keygen -t rsa -C "[email protected]"

在家目录下,用自己的邮箱生成 SSH Key,过程中一路回车,使用默认值即可。

家目录下生成 .shh 目录,其中有,id_rsa 私钥文件,id_rsa.pub 公钥文件。把 id_rsa.pub 公钥文件内容复制到 GitHub -> Account settings -> SSH Keys,完成 SSH 协议关联。

  1. 把本地仓库添加至远程仓库

先在远程仓 GitHub 创建一个 test 空仓库,然后在本地仓库关联:

[slashwan@study test]$ git remote add origin git@github.com:slashwan/test.git

关联过程中注意要用自己的远程仓地址。

把本地仓库内容推送到远程仓:

[slashwan@study test]$ git push -u origin master

此命令实际上是把分支 master 推送到远程,因为是第一次推送,加上 -u 参数,可以把本地及远程 master 分支关联起来,可简化后续操作。

  1. 克隆远程仓

把远程仓克隆到本地:

[slashwan@study ~]$ git clone git@github.com:slashwan/snake.git

不需要新建空文件夹,可直接使用此命令,会把远程仓及所在目录克隆过来,但只有 master 分支且关联。

对于本地和远程的关联,多是先建个远程仓再用 git clone 直接到本地,方便自己也方便其他小伙伴。同时 Git 支持多种传输协议,这里采用了常用的 SSH 协议。

二、查看远程仓信息

命令:git remote

使用方法:

  • 可加参数 -v

git remote -v

实际操作:

[slashwan@study test]$ git remote
origin
[slashwan@study test]$ git remote -v
origin  git@github.com:slashwan/test.git (fetch)
origin  git@github.com:slashwan/test.git (push)

origin 是 Git 默认的远程主机名。还可以看到远程仓可以 fetch 抓取和 push 推送的地址。

三、推送本地分支

命令:git push

使用方法:

  • 本地分支有更新,推送一下,新分支也可推送至远程

git push origin <name>

实际操作:
把本地的 develop 分支推到远程

[slashwan@study test]$ git push origin develop
Total 0 (delta 0), reused 0 (delta 0)
remote: 
remote: Create a pull request for 'develop' on GitHub by visiting:
remote:      https://github.com/slashwan/test/pull/new/develop
remote: 
To git@github.com:slashwan/test.git
 * [new branch]      develop -> develop

四、拉取远程分支

命令:git pull

使用方法:

  • 拉取和当前分支关联的远程分支

git pull

实际操作:

[slashwan@study test]$ git branch
  develop
* master
[slashwan@study test]$ git pull
Already up-to-date.

因为我们对远程仓没有操作,所以拉取的时候很顺利。实际情况,很可能会因为其他人的推送更新,导致拉取发生冲突,手动解决就好了。通常 git push 之前都要先 git pull 下以解决冲突

五、查看远程分支

命令:git branch -r

使用方法:

  • 分支命令加参数 -r

git branch -r

实际操作:

[slashwan@study test]$ git branch -r
  origin/develop
  origin/master

六、抓取远程分支

命令:git checkout -b <name> origin/<name>

使用方法:

  • 把未在本地的远程分支抓到本地

git checkout -b <name> origin/<name>

实际操作:

[slashwan@study test]$ git checkout master  //切换至 master
Switched to branch 'master'
[slashwan@study test]$ git branch -d develop  //先把本地 develop 删除
Deleted branch develop (was 9bd9118).
[slashwan@study test]$ git checkout -b develop origin/develop  //再抓取远程 develop
Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'

返回信息告诉你已经帮你相互关联了 develop。实际上这个命令并未真正和远程库互动,从他的执行速度就可以看出来,本质还是 git checkout 这个命令在本地起作用。

七、建立本地分支与远程分支的关联

命令:git branch --set-upstream-to=origin/<name> <name>

使用方法:

  • 分支相互关联,可以简化 git pull

git branch --set-upstream-to=origin/<name> <name>

实际操作:

[slashwan@study test]$ git pull  //develop 若是还未相互关联,可以看看返回信息
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> develop

[slashwan@study test]$ git branch --set-upstream-to=origin/develop develop  //关联 develop 分支
Branch develop set up to track remote branch develop from origin.

八、删除远程分支

命令:git push origin :<name>

使用方法:

  • 注意 origin 后的 空格

git push origin :<name>

实际操作:

[slashwan@study test]$ git push origin :develop
To git@github.com:slashwan/test.git
 - [deleted]         develop

九、git clone、git push、git pull 和 git fetch 详谈

为什么说是详谈呢?上方命令对于实用性应该够用,但作为分布式的强大,还是再详细了解一下这几个和远程仓命令相关的常用操作吧!

1. git clone

使用方法:

  • git clone <远程库地址>
    把远程仓克隆到本地。不需要先建本地仓,会把远程仓及所在目录克隆过来,而且只有 master 分支且关联

  • git clone <远程库地址> <自定本地目录名>
    第二个参数可以指定克隆到本地的仓库名

  • git clone -o <自定远程主机名> <远程库地址>
    参数 -o 后可为远程主机命名,不使用默认名 origin

2. git fetch

这好像是个新命令,其实 git pull 命令可以认为已经包含了 git fetch 命令,但他对于本地工作区无影响。

使用方法:

  • git fetch <远程主机名>
    将指定远程主机的所有更新拉取到本地

  • git fetch <远程主机名> <分支名>
    拉取指定分支的更新到本地

远程更新拉取到本地后,怎么查看和利用呢?可以利用本地命令

  • git branch -r
    //查看远程仓分支
  • git log <远程主机名>/<分支名>
    //查看相应远程仓的提交日志
  • git merge <远程主机>/<分支名>
    //合并远程分支到当前分支
  • git checkout -b <新建分支名> <远程主机>/<分支名>
    //在远程分支基础上建立新分支,即「六、抓取远程分支」

为什么会这样呢?其实在克隆远程仓的过程中,这些远程仓、本地仓等需要的参数,都设置完毕了,但都是静态的,即使远程发生变化也捕捉不到,所以需要手动更新。即真正能和远程主机互动的命令很少,而 clone、fetch、pull、push 等是为数不多的几个。

3. git pull

拉取远程主机分支,和本地分支合并,其相当于 git fetch 和 git merge <远程主机>/<分支名> 两条命令的简化。

使用方法:

  • git pull <远程主机名> <远程分支名>:<本地分支名>
    此为 git pull 较为完整的使用方法,拉取远程主机指定分支,和本地指定分支合并,不需要分支相互关联

  • git pull <远程主机名> <远程分支名>
    拉取远程主机指定分支,和本地当前分支合并,不需要分支相互关联

  • git pull <远程主机名>
    省略远程分支名,就需要分支关联了,拉取指定远程主机的关联分支,和本地当前分支合并

  • git pull
    无参数,需要分支关联,而且本地分支只关联了一个远程分支,拉取并和本地当前分支合并

4. git push

git push 有两种方式,采用默认的 simple 新模式比较好;另一种方式为 matching,可自行了解一下。先设置一下全局变量,要不然总是出提示。

[slashwan@study ~]$ git config --global push.default simple
  • git push <远程主机名> <本地分支名>:<远程分支名>
    git push 的完整用法和 git pull 类似,注意分支名的位置,推送本地分支到远程分支,若没有相应远程分支则创建,不需关联

  • git push <远程主机名> <本地分支名>
    推送本地分支,若远程没有同名分支则创建,不需关联

  • git push <远程主机名>
    推送当前本地分支,需要关联

  • git push
    推送本地分支,需要关联,且唯一

  • git push -u <远程主机名> <本地分支名>
    加 -u 参数,可以指定一个默认的关联远程主机名,然后也可以直接用无参数的 git push

5. git remote

使用方法:

  • git remote
    无参数,列出关联的所有远程主机

  • git remote -v
    参数 -v,可查看远程主机的远程仓地址

  • git remote show <远程主机名>
    查看指定远程主机的详细信息

  • git remote add <远程主机名> <远程仓地址>
    在本地仓关联远程仓,即「一、关联远程库」->「2. 把本地仓库添加至远程仓库」

  • git remote rm <远程主机名>
    删除指定的远程主机

  • git remote rename <原主机名> <新主机名>
    为远程主机改个名

推荐阅读:

Git 实用教程_简介

Git 实用教程(二)_本地命令

Git 实用教程(三)_分支操作

猜你喜欢

转载自blog.csdn.net/huaxuewan/article/details/85171059