Git Merge(合并)
Git Merge 是git中的一种合并技术,其中分支上commit的日志是完整的。
举一个例子,如果我们有一个项目:
- 在master分支上有3个commit,分别为commit1、2、3
- feature分支commit作为commit A和B
- 如果我们执行git merge操作,则commit A和B 将作为commit 4合并到master分支中。

优势:
- 日志非常详尽,可以帮助理解每次merge发生的方式和时间的完整历史。
- 发现错误并解决它们很容易。
缺点:
- 导致笨拙的日志/历史记录
- 不是很人性化

Git-Rebase(变基)
Git Rebase类似于git merge,但是在这种技术中,日志在merge之后被修改。引入Git rebase是为了克服合并的限制,即 使历史记录看起来是线性的。
让我们举一个例子,如果我们有一个项目:
- 在master分支上有3个commit作为commit1、2、3
- feature分支commit作为commite A和B
- 如果我们执行git rebase操作,则 commit A和B将作为commit 4和5重新基于master分支,并且将没有feature分支的日志。

优势:
- 日志是线性的
缺点:
- 我们无法跟踪在目标分支上合并commit的时间和方式
Git Merge VS Git Rebase
| Git Merge | Git Rebase |
|---|---|
| Git merge是一个允许您从Git合并分支的命令 | Git rebase允许开发人员将更改从一个分支集成到另一个分支 |
| 在Git中,合并日志将显示commit合并的完整历史记录 | 在Git rebase中,日志是线性的 |
| feature分支上的所有commit将合并为master分支中的单个commit | 将重新设置所有commit,并将相同数量的commit添加到master分支 |
| 当目标分支是共享分支时使用Git Merge | 当目标分支是私有分支时,应使用GitRebase |
实际演示
使用Git rebase实现提交压缩
演示分支:master
新建 git_test.txt 文件,a b c 分别提交,生成三个提交请求

选择要压缩的提交(这里选择 提交a 请求,然后右键)

将 a、b请求 压缩提交:

修改完提交描述,按下Ctrl+Enter

按照同样的方式将 c请求 也压缩进来

启动变基

最终效果:三个合并请求变为一个

Git Merge和Git Rebase合并请求区别
需求:
- 在
feature开发新特性 - 中间需要在
master分支穿插新功能 - 切换回
feature分支完成新特性开发
使用Git merge 合并请求
演示分支:
共享分支:master
特性分支:feature1
新建特性分支 feature1,然后新建 提交1a

切换到master分支,新建提交d

切换回feature1分支,完成特性功能开发

master合并feature1,并解决冲突

最终效果:合并完成后会多一个merge出来

使用Git rebase 合并请求
步骤 1 2 3 同上

将feature2变基到 master分支,如下图所示:


切换到master分支,将feature2分支合并到master分支,并将合并提交到远程


当特性功能开发完成,删掉feature2分支,此时 feature2的提交记录也会跟着清除

