day07-Git分支线上使用概况

174 阅读4分钟

1.本地分支

1.1 长期分支

在本地工作时,通常一个项目会有很多个工作版本,一般线上稳定版放在master分支,基于稳定版,也许会包含develop版和next版本。于是在master基础上,可以发展为develop和next分支。当后续分支经过测试,确认为稳定版本后,再将其merge到master分支。 image.png 

1.2 主题分支

主题分支是在一个项目中,基于大工程基础上,会有一些小功能的拓展,那么这些小功能会单独放在一个分支里面,当功能完善后,将此分支merge到master分支。

2.远程分支

可以通过git ls-remote <remoteName> 来显式地获得远程引用的完整列表,或者通过git remote show <remoteName>获得远程分支的更多信息。 git clone 命令会把项目clone到本地,并且将远程服务器命名为origin,项目的分支名称在本地的命名方式为:<remoteName>/<branchName>

举个例子:假设你的网络里有一个在 git.ourcompany.com 的 Git 服务器。如果你从这里克隆,Git 的 clone 命令会为你自动将其命名为 origin,拉取它的所有数据, 创建一个指向它的 master 分支的指针,并且在本地将其命名为 origin/master。 Git 也会给你一个与 origin 的master 分支在指向同一个地方的本地 master 分支,这样你就有工作的基础。

image.png 如果你在本地的 master 分支做了一些工作,在同一段时间内有其他人推送提交到git.ourcompany.com 并且更新了它的 master 分支,这就是说你们的提交历史已走向不同的方向。 即便这样,只要你保持不与 origin 服务器连接(并拉取数据),你的 origin/master 指针就不会移动。

image.png 如果要与给定的远程仓库同步数据,运行 git fetch 命令(在本例中为 git fetch origin)。 这个命令查找 “origin” 是哪一个服务器(在本例中,它是 git.ourcompany.com), 从中抓取本地没有的 数据,并且更新本地数据库,移动 origin/master 指针到更新之后的位置。

image.png

2.1 将本地分支推送到服务器:git push <remote> <branch>

也可以运行git push origin serverfix:serverfix,它会做同样的事——也就是说: 推送本地的 serverfix 分支,将其作为远程仓库的 serverfix 分支” 可以通过这种格式来推送本地分支到一个命名不相同的远程分支。 如果并不想让远程仓库上的分支叫做 serverfix,可以运行 git push origin serverfix:awesomebranch 来将本地的 serverfix 分支推送到远程仓库上的 awesomebranch 分支。

2.2 跟踪分支

前言: 跟踪分支是与远程分支有直接关系的本地分支。 如果在一个跟踪分支上输入 git pull,Git 能自动地识别去哪个服务器上抓取、合并到哪个分支。

2.2.1 跟踪分支创建

2.2.1.1 本地分支与远程分支同名创建:

1.基于远程服务器分支创建新的分支:git checkout -b <branch> <remote>/<branch>. 使用示例: git checkout -b dev origin/liang 以远程库中的 liang 分支为起点,在本地创建一个 dev 分支。
便捷式写法: git checkout --track <remote>/<branch>

2. 如果你尝试检出的分支 (a) 不存在且 (b) 刚好只有一个名字与之匹配的远程分支,那么 Git 就会为你创建一个跟踪分支:

$ git checkout serverfix 
  Branch serverfix set up to track remote branch serverfix from origin.
  Switched to a new branch 'serverfix'

2.2.1.2 本地分支与远程分支不同名创建:

使用上述命令:git checkout -b <branch> <remote>/<branch>.可完成不同名创建。

$ git checkout -b sf origin/serverfix
  Branch sf set up to track remote branch serverfix from origin.
  Switched to a new branch 'sf'

查看设置的所有跟踪分支,可以使用 git branch 的 -vv 选项。 这会将所有的本地分支列出来并且包 含更多的信息,如每一个分支正在跟踪哪个远程分支与本地分支是否是领先、落后或是都有。

3. 拉取

当 git fetch 命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容。 它只会获取数据然后让你自己合并。
然而,有一个命令叫作 git pull 在大多数情况下它的含义是一个 git fetch 紧接着一个 git merge 命令。 如果有一个像之前章节中演示的设置好的跟踪分支,不管它是显式地设置还是通过 clone 或 checkout 命令为你创建的,git pull 都会查找当前分支所跟踪的服务器与分支, 从服务器上抓取数据然 后尝试合并入那个远程分支。由于 git pull 的魔法经常令人困惑所以通常单独显式地使用 fetch 与 merge 命令会更好一些。

4.删除远程分支

假设你已经通过远程分支做完所有的工作了——也就是说你和你的协作者已经完成了一个特性, 并且将其合并 到了远程仓库的 master 分支(或任何其他稳定代码分支)。 可以运行带有 --delete 选项的 git push 命令来删除一个远程分支。 如果想要从服务器上删除 serverfix 分支,运行下面的命令:

$ git push origin --delete serverfix
  To https://github.com/schacon/simplegit
  - [deleted] serverfix