git合并与提交

多人合作的git使用

git merge 的 —no-ff 参数

git merge 默认是”快进式合并”(fast-farward merge)。这样合并操作会直接将Master 指向 develop 分支

WechatIMG580

上图有多分支合并的结果图,可以看到 使用—no-ff的提交流程更清晰

分支管理

git flow 只存在两个长期分支master 和 develop

其他分支命名必须遵照规则,在合并之后立即删除。

1
2
3
  * 功能(feature)分支
  * 预发布(release)分支
  * 修补bug(fixbug)分支

master 分支代码是不可更改的。

正常流程中将准备发布的dev上的代码合并入master中再进行部署

需要修复bug,则新建fixbug分支,完成后分别合并入dev与master

主分支保持同步

请勿在多人工作分支上进行变基操作

fetch更新本地仓库两种方式:

复制代码;)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//方法一
$ git fetch origin master //从远程的origin仓库的master分支下载代码到本地的origin master
$ git log -p master.. origin/master//比较本地的仓库和远程参考的区别
$ git merge origin/master//把远程下载下来的代码合并到本地仓库,远程的和本地的合并
//方法二
$ git fetch origin master:temp //从远程的origin仓库的master分支下载到本地并新建一个分支temp
$ git diff temp//比较master分支和temp分支的不同
$ git merge temp//合并temp分支到master分支
$ git branch -d temp//删除temp

合并多次commit

开发的时候我们通常会在开发分支多次commit,但是对于多人合作来说,很多commit是无用的信息。如果将所有commit信息全部合并进git的baseline中,会导致commit信息过多并且混乱

git merge –squash abc
–squash选项的含义是:不保留待合并分支上的历史信息,也不提交、不移动HEAD,因此需要一条额外的commit命令。
其效果相当于将another分支上的多个commit合并成一个,放在当前分支上,原来的commit历史则没有拿过来。

判断是否使用–squash选项最根本的标准是,待合并分支上的历史是否有意义。

合并的时候—squash 参数可以将分支上所有的变动改为一次commit,使用merge命令后需要在合并后的分支上将变动添加,commit一次,这样在分支上的多次commit在git的baseline上就只会有一次commit。

但是—squash 和 —no-ff参数不可一并使用。

—squash 和 —no-ff 是不同的提交风格

fast-farward式的merge通过—squash 可以形成单一的整洁的提交历史记录

—no-ff 式的merge 形成的提交历史记录可以显示详细的提交历史