Git基础之分支操作

1,538 阅读4分钟

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