在 Git 中,merge 和 rebase 是两种将分支的更改合并到一起的常用方法。虽然它们都可以实现类似的目标,但它们的工作方式和效果有所不同。
1. Git Merge
- 定义:git merge 是将两个分支的历史合并在一起的一种操作。当你执行 git merge 时,Git 会创建一个新的“合并提交”,这使得两个分支的历史记录都保持不变。
- 特点:
- 保留历史记录: 合并会保留所有提交的历史,形成一个非线性的提交历史。
- 非破坏性:对现有分支不会以任何方式进行更改。
- 简单易用: 对于初学者而言,合并的过程相对简单。
- 适用于公共分支: 合并通常用于将功能分支合并回主分支(如 main 或 master)。
git checkout feature
git merge master
// 缩写为
git merge feature master
2. Git Rebase
- 定义:git rebase 是一种将一个分支上的更改“应用”到另一个分支的方法。它会将当前分支的所有提交转移到目标分支的最顶端,从而形成一条线性的提交历史。
- 特点:
- 可能导致冲突: 在 rebase 过程中,如果存在冲突,需要手动解决这些冲突。
- 更清晰的项目历史:消除了merge所需要的不必要的合并提交,且会产生完美线性的项目历史记录。
- 不适用于公共分支: 在公共分支上使用 rebase 可能会导致其他开发者的困惑,因为它会重写历史。
git checkout feature
git rebase master
// 缩写
git rebase feature master
3. 总结与应用
- git rebase的原则:不能在一个共享的分支上进行Git rebase操作。
- 融合代码到公共分支的时使用git merge,而不用git rebase
- 融合代码到个人分支的时候使用git rebase,可以不污染分支的提交记录,形成简洁的线性提交历史记录。
- 使用rebase合并多次提交记录
// 尝试合并分支的最近 4 次提交纪录
git rebase -i HEAD~4
//这时候,会自动进入 vi 编辑模式:
// 进入编辑模式,第一列为操作指令,第二列为commit号,第三列为commit信息。
git rebase --abort
git rebase --continue