在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase。
两种观点:
-
有一种观点认为,仓库的提交历史即是记录实际发生过什么。
它是针对历史的文档,本身就有价值,不能乱改。从这个角度看来,改变提交历史是一种亵渎,你使用 谎言 掩盖了实际发生过的事情。
如果由合并产生的提交历史是一团糟怎么办? 既然事实就是如此,那么这些痕迹就应该被保留下来,让后人能够查阅。
-
另一种观点则正好相反,他们认为提交历史是项目过程中发生的事。没人会出版一本书的第一版草稿,软件维护手册也是需要反复修订才能方便使用。
持这一观点的人会使用 rebase 及 filter-branch 等工具来编写故事,怎么方便后来的读者就怎么写。
这两种操作,更多的建议是:
- 在公共分支,如master、dev,使用merge来合并其他分支,如feature、bugfix
- 在一般的开发分支,如果要合并进公共分支的内容,使用rebase
- 在各开发分支之间的合并,使用merge
- Merge 会把公共分支和你当前的commit 合并在一起,形成一个新的 commit 提交
- Rebase会重置当前分支的迁出版本
Merge的时候,一定不要使用fast-forward,IDE和gitlab web默认都不启用,如果使用命令行操作,一定使用如下命令:
git merge --no-ff xxx
也不建议使用–squash选项