1.git merge的参数--ff、--no-ff和–squash的区别?
Topic source1.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
叫爹
答:
根据[官方文档](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只是为让提交的日志看起来简洁一些。