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的提交记录也会跟着清除