git之merge --no-ff与fast farward

Published: 12 Aug 2013 Category: git

分支可以说是git中举足轻重的一个必杀技。利用git的分支功能我们可以简化开发流程从而加快开发进度。举个简单的例子,考虑这么一种情况:

1.我们没有利用git进行代码管理

2.要在现有代码基础上实现某个功能

为了保持原有代码,我们可能要备份一份,目的是防止修改代码后某个功能没有实现反而不知道怎么恢复回去。

如果我们利用git中的分支功能,就不用这么麻烦了。在原来的分支上新建一个分支,修改代码,编译,运行。如果功能实现可以采用merge直接把这些修改应用到原来的分支上。如果功能没有实现,或者说又不需要这个功能了,那么可以切换到原来的分支,代码就恢复到开发这个功能之前的状态了,一点变化也没有。是不是很酷!

好了,简单的说了一下git中分支的一个好处。下面切入正题。

现在,git的历史提交是这样子的:

git-graph0

现在,我们在master分支上新建一个分支b1,做了一些修改和提交,现在历史提交是这样子的:

git-graph1

如果,分支b1开发好了,我们想把它合并到master分支,我们可以这么来干:

  1. git checkout master
  2. git merge b1

看一下,git的反馈消息:

git-graph2

再看一下提交历史记录:

git-graph3

我们看到,masterb1都指向了同一个提交。这样子带来一个坏处,我们没法清新看到历史开发记录,而--no-ff正好解决这个问题。如果我们当初这么开合并:

  1. git checkout master
  2. git merge --no-ff b1

我们将会看到了提交记录是这样子的:

git-graph4

这样子,历史提交就很清晰。