利用Git进行多人协作开发中的一些个人总结以及常用的Git命令清单!

2,373 阅读6分钟

一,远程仓库

1.1添加远程库

  1. git init

初始化,变为一个本地仓库

  1. git remote add origin url

把本地库和远程库关联,url是远程仓库的地址,设置一个变量orgin(英文中库的意思)来保存远程库在本地的引用,remote是关键字,英文中是“远程”的意思

说明:git remote remove origin 取消本地仓库关联远程仓库

  1. git push -u origin master

把本地库的所有内容推送到远程库上面,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。 (origin代表远程库)

  1. git push origin master

此后推送最新的修改,就可以简化了

但是这样通过添加远程仓库来关联本地仓库过于麻烦,有没有什么好的方式呢?有的!!!

1.2克隆仓库

  1. git clone url

Git 的 clone 命令会为你自动将远程仓库命名为 origin,拉取它的所有数据,创建一个指向它的 master 分支的指针,并且在本地将其命名为origin/master(origin/master可以看作远程仓库master分支在本地仓库中的一个镜像)。同时Git 也会给你一个与 origin/master 分支在指向同一个地方的本地 master 分支

问题:如果此时远程仓库中除了master分支,还有bug,dev分支,那么克隆以后,本地仓库中会不会有bug,dev分支呢?

答案: 有的 !

但是我们需要注意的是,克隆以后,本地仓库通过:git branch命令查看本地仓库分支列表会发现没有bug,dev分支,只有master分支!

这是因为克隆在抓取远程仓库的时候是执行git clone,git clone会把远程仓库中所有的分支数据抓取下来,抓取下来的分支在本地会被命名为origin/master origin/dev origin/bug,抓取结果是直接送到版本库(Repository)中,本地的工作区(workspace)不会自动生成一份可编辑的副本。

那为什么本地仓库中git branch 可以看的到master分支而看不到dev bug分支呢?

前面已经说了: 同时本地仓库Git 也会给你一个与 origin/master 分支在指向同一个地方的本地 master 分支 (也就是说在工作空间中只有本地仓库Git给的master分支)。但是本地仓库Git不会自动帮你创建你一个与 origin/dev 分支在指向同一个地方的本地 dev 分支 ,bug分支也是一样的。本地仓库Git只会自动创建和master/origin指向同一个地方的master 分支。所以本地仓库Git通过git branch命令只能看的到master分支(git branch 看到的只是工作空间中存在的分支,而git branch -r 可以看到抓取下来并保存到本地仓库的版本库中的 origin/master origin/dev origin/bug 分支 ),同时master分支上内容和远程仓库中的master分支内容是一样的(因为本地仓库中master分支和镜像origin/master分支是指向同一个地方)。

二,切换到dev分支进行开发

本地仓库新建一个dev分支,然后将这个本地仓库dev分支与远程仓库的dev分支关联起来

  1. git checkout master

切换到master主分支上,然后在主分支上建dev分支,当分支很多的时候,这样子不会凌乱,当然你也可以在其他分支上建dev分支

  1. git checkout -b dev

在主分支master上创建并切换到dev分支

git branch dev 创建分支

git checkout dev 切换分支

  1. git branch --set-upstream-to=origin/dev dev

然后把远程仓库的dev分支和本地的dev分支关联起来

总结:种把本地dev分支与远程dev分支关联起来是基于克隆仓库时候抓取到本地仓库中版本库(Repository)中的origin/dev

但是这样写太麻烦,下面是简介命令的写法

  • git checkout -b dev origin/dev

注意:不需要git checkout master,因为此时本地仓库Git新建的dev是在本地仓库中版本库中的 origin/dev的基础上新建的,和本地仓库Git中的master分支没有关系(即dev分支不是在master分支上面建的)

现在通过git branch 可以看到有master分支和dev分支,本地dev分支和远程仓库中dev分支上的内容也是一致的(因为本地仓库中dev分支和镜像origin/dev分支是指向同一个地方)。

!!!顺便提一下,git fetch也是拉取远程分支到本地版本库中,如果克隆以后,远程仓库又新建一个feature分支,应该如何操作呢?

这里是不需要先git checkout master,因为git fetch是拉取所有远程分支到本地仓库的版本库里面,在任何一个本地仓库的分支上都可以操作,和master分支没有关系。

  1. git fetch

首先应该先git fetch拉取新的镜像origin/feature到版本库,因为本地仓库的版本库中没有分支origin/feature的信息

  1. git checkout -b feature origin/feature

现在本地feature分支和远程仓库feature分支上的内容也是一致的(因为本地仓库中feature分支和镜像origin/feature分支是指向同一个地方),同时本地仓库Git新建的feature是在本地仓库中版本库中的 origin/feature的基础上新建的

三,如果本地仓库需要新建一个plane分支,并在上面开发一个新的功能,可是远程仓库上面没有这个分支,应该怎么办?

  1. git checkout master

切换到主分支上,在主分支上建dev分支,为了保持逻辑清晰

  1. git checkout -b plane

创建并切换到plane分支,此时仅为一个本地分支,还没有同步到远端

  1. git push origin plane(origin是远程仓库的别名)

这里的含义是将plane这个分支提交到远程仓库上面。如果远程仓库没有这个分支,那么也会新建一个该分支。

  1. git push --set-upstream origin plane

然后建立两个分支之间的关联,注意这里建立关联不是关键字branch哈!这是因为没有git fetch,本地版本库中没有origin/plane,不能通过关键字branch建立关联。当然可以git push origin plane之后,再git fetch,再git branch –-set-upstrem-to=origin/plane plane也行。

  1. git add .

开发功能完毕,添加暂存区

  1. git commit -m '开发完毕'

提交

  1. git push origin plane

推送到远程仓库中的plane分支

四,如果对git fetch还有疑惑,大家可以看看这篇博客,个人觉得写的很不错,最好看一下!

git fetch 理解

五,git clone,push,pull,fetch命令详解,个人觉得写的很不错,,最好看一下!

git clone,push,pull,fetch命令详解

六,最后是一些常用命令清单,大家可以看看这篇博客,最好看一下!

常用命令清单