第一种就不要用了,合并的分支最好都是有共同历史提交,不加这个参数比较安全。
第二种,首先你需要 rebase 和 merge 的区别。简单解释一下,假设我们现在的分支结构如下:
如果采用 merge,会形成一个新的提交点。如下:
如果是 rebase,那么提交结构将变成如下形式,即在 v3 基础上重建 v4,而非形成新的提交点。
如果是同一个分支,一般会采用 pull rebase 进行合并,即不会形成新的提交点。而默认 git pull 是通过 merge 合并。
如果发生冲突的话,无论是 merge,还是 rebase,都需要先解决冲突,这个过程需要通过手动解决。比如发现一个文件发生冲突。手动解决完冲突后,用 git add 把处理好的内容提交到暂存区。接下来的处理,merge 和 rebase 的操作不同。
如果是 merge,通过 git commit 即可。如果是 rebase,通过 git rebase --continue,继续执行 rebase 即可。
一个简单的例子。
假设 pull 之后,某个文件内容如下:
<<<<<<< HEAD
func main() {
=======
const a = 1
>>>>>>> feature1
我们需要手动解决文件冲突,修改之后的内容如下:
const a = 1
func main() {
接着,执行 git add 把文件提交到暂存区,接着通过 git commit 提交到仓库,最后,通过 git push 提交到远程。
假设是 rebase,只需要将 git commit 修改为 git rebase --continue 即可。
如果对 git 的整体架构不是很了解,建议去看看我很早之前写的一篇介绍 Git 架构的文章。波罗学:谈谈版本管理GIT之理论与架构zhuanlan.zhihu.com