git是一款实用的版本管理工具,我们通过git init
初始化一个git仓库,git会在当前目录为我们生成一个.git/
目录,用来管理我们的版本文件信息。
在这个目录中有一个二级目录.git/hooks/
,它里面存放了一些git执行的钩子脚本,在git运行的不同时期,执行不同的钩子。我们可以通过编写一些钩子脚本控制它的工作流程,比如在代码提交时进行邮件通知、代码格式检验等。
本文介绍的是一种通过编写钩子防止分支合并的案例,场景是在开发中有一些远超前于当前分支的分支(比如beta分支),如不慎将其合入开发分支(feature分支),然后还提交了,会给项目带来不必要的风险。
考虑日常工作情况,先使用git add
, git commit
提交代码,然后git merge
合并分支。git merge
进行的是一种三方合并,git分析了当前版本(以下简称F版本)、待合并版本(以下简称M版本)和它们的第一个共同祖先(也即分裂出它们两者的那个版本)这三者的差异,然后进行判断。如果M包含F的所有修改,则默认采用fast forward
合并模式,直接把F所在分支的指针向前移动到M所在分支,合并结束,且不会执行任何钩子。