Discuss / Git / 1.git merge的参数--ff、--no-ff和–squash的区别?

1.git merge的参数--ff、--no-ff和–squash的区别?

Topic source

叫爹

#1 Created at ... [Delete] [Delete and Lock User]

答:

根据[官方文档](https://git-scm.com/docs/git-merge)可知,--ff和--no-ff是在“当合并的历史是当前历史的后代”的情况才起作用的,下面具体介绍一下“当合并的历史是当前历史的后代”:

```bash

          A---B---C topic

     /         \

    D---E-----------H master

```

从E分叉出topic分支,topic分支上提交了A、B、C,但master上从E开始没有进行提交。

当我们处于master分支,想要将topic分支合并到master中时,就涉及到三个不同的选项--ff、--no-ff、--ff-only。也就是说这三个选项只在这种情况有效,这种情况为:master上从E开始都没有提交,并想要将topic分支合并到master中。这种情况称为“当合并的历史是当前历史的后代”。

节点的tag不存储在refs/tags/中时,默认使用--no-ff。其他情况默认使用--ff

--no-ff:创建新的提交H

```bash

          A---B---C topic

     /         \

    D---E-----------H master

```

--ff:不创建新的提交H,将指针mater指向C,得到如下结果:

```bash

D---E---A---B---C master

```

–squash:将待合并分支的最后一个提交放到当前分支的工作区。如A、B、C对readme.txt进行了修改,那么–squash的作用就是将经过A、B、C的readme.txt文件复制到工作区中。然后我们就可以进行add和commit来生成一个提交。生成的这个提交,就相当于对A、B、C工作的总结。

如果复制到工作区的readme.txt文件与工作区中的readme.txt文件有冲突??答:出现这种冲突时的处理办法就是将冲突内容全部展示在readme.txt中。

–squash只是为让提交的日志看起来简洁一些。

叫爹

#2 Created at ... [Delete] [Delete and Lock User]

1.git merge的参数--ff、--no-ff和–squash的区别?

答:

根据[官方文档](https://git-scm.com/docs/git-merge)可知,--ff和--no-ff是在“当合并的历史是当前历史的后代”的情况才起作用的,下面具体介绍一下“当合并的历史是当前历史的后代”:

```

            A---B---C    topic

           /              \

    D---E-----------H    master

```

从E分叉出topic分支,topic分支上提交了A、B、C,但master上从E开始没有进行提交。

当我们处于master分支,想要将topic分支合并到master中时,就涉及到三个不同的选项--ff、--no-ff、--ff-only。也就是说这三个选项只在这种情况有效,这种情况为:master上从E开始都没有提交,并想要将topic分支合并到master中。这种情况称为“当合并的历史是当前历史的后代”。

节点的tag不存储在refs/tags/中时,默认使用--no-ff。其他情况默认使用--ff

--no-ff:创建新的提交H,得到如下结果:

```bash

            A---B---C    topic

           /              \

    D---E-----------H    master

```

--ff:不创建新的提交H,将指针mater指向C,得到如下结果:

```bash

D---E---A---B---C master

```

–squash:将待合并分支的最后一个提交放到当前分支的工作区。如A、B、C对readme.txt进行了修改,那么–squash的作用就是将经过A、B、C的readme.txt文件复制到工作区中。然后我们就可以进行add和commit来生成一个提交。生成的这个提交,就相当于对A、B、C工作的总结。

如果复制到工作区的readme.txt文件与工作区中的readme.txt文件有冲突??答:出现这种冲突时的处理办法就是将冲突内容全部展示在readme.txt中。

–squash只是为让提交的日志看起来简洁一些。


  • 1

Reply