GIT分支操作
在进行多个并行作业时,我们会用到分支。在这类并行开发的过程中,往往同时存在多个最新代码的状态。如下图,从master分支创建feature-A分支和fix-B分支,每个分支都拥有自己的最新代码。master分支是git默认创建的分支。因此基本上所有开发都是以这个分支为中心进行的。
不同分支中,可以同时进行完全不同的作业。等该分支的作业完成后再与master分支合并。如feature-A分支的作业结束后与master分支进行合并。 通过灵活运用分支,可以让多人同进高效地进行并行开发。git branch
---显示分支一览表
git branch
命令可以将分支名列表显示,同时可以确认当前所在分支。让我们实际来运行git branch
命令。
$ git branch
* master
可以看到master分支左侧有*
星号,表示这是我们当前所在的分支。即我们现在在master分支下进行开发。结果中没有显示其他分支名,表示本地仓库只存在master一个分支。
git checkout -b
---- 创建、切换分支
如果想以当前的master分支为基础创建新的分支,我们需要用到git checkout -b
命令
- 切换到feature-A分支并进行提交
$ git checkout -b feature-A
切换到一个新分支 'feature-A'
实际上,上续命令是以下两命令的组合:
git branch feature-A
git checkout feature-A
创建feature-A分支,并将当前分支切换为feature-A分支。这里查看分支列表,会显示我们在feature-A分支下。
$ git branch
* feature-A
master
接下来我给readme.md文件添加一些内容,然后提交:
$ git add readme.md
$ git commit -m 'add new feature-A'
[feature-A f47f3a1] add new feature-A
1 file changed, 1 insertion(+)
查看下日志确保我们刚才的提交成功了。
$ git log
commit f47f3a1b4553a4ea4c2d54e22d6bbcbf462ba7e0 (HEAD -> feature-A)
Author: pinghua.yuan <pinghua.yuan@ushow.media>
Date: Fri Nov 15 20:40:11 2019 +0800
add new feature-A
commit 57c6fbfaf1b515b9e2004b4cb898ae60d52232a0 (master)
Author: pinghua.yuan <pinghua.yuan@ushow.media>
Date: Thu Nov 14 20:48:13 2019 +0800
file modify
commit ef26724aeaedc087fe1fd955df1c623f6d78d235
Author: pinghua.yuan <pinghua.yuan@ushow.media>
Date: Thu Nov 14 20:21:58 2019 +0800
add readme.md file
- 切换至master主分支 现在我们来看下master分支是否受到影响,首先切换到master分支
$ git checkout master
切换到分支 'master'
查看readme.md文件内容,发现内容仍然保持原先的状态,没有添加新内容。feature-A分支下的修改不会影响到master分支,这正是在开发中创建分支的优点。只要创建多个分支,就可以在不相互影响下同时进行多个功能的开发。
- 切回上一个分支
$ git checkout -
切换到分支 'feature-A'
使用-
连字符代替分支名,就可以切换至上一个分支。当然,将-
换成feature-A同样可以切换到feature-A分支。
- 特性分支
Git与SVN等集中型版本管理的系统不同。创建分支时不需要连接中央仓库,所以能够相对轻松创建分支。因此当大部分工作流程中都用到了特性分支。 特性分支是集中实现单一特性(主题),除此之外不进任何作业的分支。在日常开发中,往往创建数个特性分支,同时在此之外保留一个可以随时发布软件的稳定分支。稳定分支由master分支担当。
基于特定主题的作业在特性分支中进行,主题完成后与master分支合并,只要保持这样一个开发流程,就能保证master分支可以随时供人查看。这样一来,其他开发者也可以大胆地从master分支创建新的分支。
- 主干分支
主干分支是新特性分支的原点,同时也是合并的终点。通常会以master分支作为主干分支。主干分支中并没有开发到一半的代码,可以随时供查看。 有时需要让这个主干分支总是配置在正式环境中,有时也需要用标签tag等创建版本信息,同时管理多个版本发布。拥有多个版本发布时,主干分支也有多个。
git merge
---合并分支
假设我们的feature-A已实现完,想要将期合入master分支,首先切到master分支:
$ git checkout master
然后合并feature-A分支。为了历史记录中明确记录下本次合并分支,我们需要创建合并提交。因此加上--no-off
参数
$ git merge --on-ff feature-A
Merge branch 'feature-A'
# 请输入一个提交信息以解释此合并的必要性,尤其是将一个更新后的上游分支
# 合并到主题分支。
#
# 以 '#' 开头的行将被忽略,而且空提交说明将会终止提交。
Merge made by the 'recursive' strategy.
readme.md | 1 +
1 file changed, 1 insertion(+)
这样一来,feature-A 分支的内容就合并到 master 分支中了。
git log --graph
——以图表形式查看分支
用 git log --graph
命令进行查看的话,能很清楚地看到特性 分支(feature-A)提交的内容已被合并。除此以外,特性分支的创建以 及合并也都清楚明了。
git log --graph
命令可以用图表形式输出提交日志,非常直 观,请大家务必记住。
* commit 5808f85731d4d19fa0aa79be04bab37d64070590 (HEAD -> master)
|\ Merge: 57c6fbf f47f3a1
| | Author: pinghua.yuan <pinghua.yuan@ushow.media>
| | Date: Fri Nov 15 21:12:46 2019 +0800
| |
| | Merge branch 'feature-A'
| |
| * commit f47f3a1b4553a4ea4c2d54e22d6bbcbf462ba7e0 (feature-A)
|/ Author: pinghua.yuan <pinghua.yuan@ushow.media>
| Date: Fri Nov 15 20:40:11 2019 +0800
|
| add new feature-A
|
* commit 57c6fbfaf1b515b9e2004b4cb898ae60d52232a0
| Author: pinghua.yuan <pinghua.yuan@ushow.media>
| Date: Thu Nov 14 20:48:13 2019 +0800
|
| file modify
|
* commit ef26724aeaedc087fe1fd955df1c623f6d78d235
Author: pinghua.yuan <pinghua.yuan@ushow.media>
Date: Thu Nov 14 20:21:58 2019 +0800
add readme.md file