安路的技术博客

Nothing in life is to be feared. It is only to be understood

Git分支

| Comments

分支是在软件项目中启动一条单独的开发线的方法。分支是一种统一的,原始的的状态分离出来的,能够使开发能够在多个方向上同时进行,并可能产生项目的不同版本。通常情况下,分支会调解并与其他分支合并,来重聚不同的力量。

Git允许很多分支,因此在同一个版本库中可以有许多不同的开发线。Git的分支是轻量级的,简单的,Git对合并的支持是一流的,所以,大多数的Git用户把分支作为日常使用。

使用分支的原因

  • 一个分支通常代表一个单独的客户端发布版。如果你想开始项目的1.1版本,但是你知道客户想保持1.0版,那就把旧版本当做一个单独的分支。
  • 一个分支可以封装位一个开发阶段,比如原型,测试,稳定或者临近发布。你可以认为1.1版本是个单独的阶段。
  • 一个分支可以隔离一个特性的开发或者研究特别复杂的bug,例如,可以引入一个分支来完成一个明确定义的,概念上的孤立的任务,或者在发布之前帮助几个分支进行合并。只是为了解决bug就创建一个新分支,这看起来可能是杀鸡用牛刀了,但是git的分支系统恰恰鼓励这种小规模的使用

分支名

版本库中的默认分支名为Master,大多数开发人员都会在这个分支上开发和维护,除了git在版本库中引入这个名字之外。如果愿意,可以重命名甚至删了master分支,但是最好不要删除。

为了支持可扩展和分类组织,可以创建一个带层次的分支名,假设你所在的一个开发团队正在修正大量的bug,把每个修复的开发放在层次结构中,在bug分支下建立不同分支,如bug/pr-1002和 bug/pr-1004,bug/pr-1005…

1
git show-branch 'bug/*'

使用分支

在任何时间里,版本库里可能有许多不同的分支,但是最多只有一个当前的或者活动的分支。 分支允许版本库中的每一个分支的内容向许多不同的方向发散。当一个版本库分出至少一个分支时,把每次提交应用到某个分支,取决于那个分支是活动的。

每一个分支在一个特定的版本库中必须有唯一的名字,一个分支的最近提交称谓分支的头部 tip or head.如果想复制版本库,分支名和那些分支上的开发都将是新复制版本库的副本的一部分。

创建分支

1
git branch branch[starting-commit]

比如

git branch prs/pr-1138

如果没有指定的staring-commit,就默认为当前分支上的最近提交。换言之,默认是在你现在工作的地方启动一个新的分支。 需要注意的是,git branch只是把分支名引进版本库,并没有改变工作目录去使用新的分支。 如果要切换分支,可以用如下命令

git checkout prs/pr-1138

列出分支名

git branch命令列出版本库中的分支名。

git branch 

查看分支

git show-branch

git show-branch 命令提供比 git branch 更详细的输出,按时间顺序输出

检出分支

工作目录一次只能反映一个分支。要在不同的分支上开始工作,要发出git checkout 命令,给定一个分支名,Git checkout会使该分支变成新的分支。

git checkout bug/pr-1

合并变更到不同分支

如果使用-m 选项特别要求,Git通过在你的本地修改和对目标分支之间进行一次合并操作,尝试将你的本地修改加入到新工作目录中。

git checkout -m dev
M NewStuff
switch to branch "dev"

git merge 分支名

在这里,git已经修改了NewStuff文件,并成功检出了dev分支。 本次合并的操作完全发生在工作目录。 如果git可以检出一个分支,改变它,并且在没有任何合并冲突的情况下清晰地合并本地修改,那么检出请求就成功了。

假设你再开发版本库的master分支,并对NewStuff文件进行了一些修改。然后,你发现你所做的更改其实应该在另一分支,也许是因为修复了问题报告1,所以应该提交到bug/pr-1分支。

创建并检出分支

当你想创建一个新分支并切换到它, Git提供了一个快捷方式 -b new_branch 选项来处理这种情况

git checkout -b 分支名

比如
git checkout -b bug/pr-3

删除分支

命令 git branch -d 分支名从版本库中删除分支

git branch -d bug/pr-3

Comments