再次产生的冲突的原因是,之前解决冲突时,选择了 master 的内容,也就意味着在 rebase_branch 提交的 commit add feature for origin.txt in rebase 被放弃了,而当前的 commit fixed before commit in rebase_branch 是基于丢弃的那个 commit 。
了解到产生冲突的原因,任意选择内容,保存就可以了,这里我们选择了 rebase_merge 分支上的内容。
git add . git rebase --continue 3. 选择将 master 和 rebase_branch 的内容合并后的结果这里我们选择将 master 和 rebase_branch 的分支都保留下来:
保存当前的修改:
git add origin.txt git rebase --continue可以看到,第二次冲突产生,原因是 rebase_branch 分支中过去的 commit 出现变更,和 rebase_branch 原有 commit 的记录不一致。
同样的,我们也会遇到三种情况:
A 以第一次解决冲突后的内容为准:
git add . # 这就意味着 rebase_branch 最新节点的添加的内容被舍弃,所以没有任何改变,可以直接跳过 git rebase --skipB 以 rebase_branch 分支上的结果为准
C 保留 rebase_branch 和 之前修改后的内容:
B C 处理方法相同:
git add . # 保存我们的更改就可以了 git rebase --continue注意有时 git rebase --continute 操作无法生效时,原因在于 rebase 会逐一应用当前分支的 commit 到目标分支(一般是 master)。像例子中演示的那样,第一次解决冲突后的内容,和第二次解决冲突后的内容一样,这时用 git rebase --skip 跳过就好了。
git cheery-pick在 cherrypick_branch 分支上模拟 master 的提交操作。
使用 cherry-pick 进行合并操作
git cherry-pick eb1a8fb出现了冲突,可以看到和 rebase 操作的合并操作刚好相反,这里是以 cherrypick_branch 的最新 commit 为准,去合并 master 的 commit.
选择 master 内容,进行合并:
git add origin.txt git commit -m "fixed add feature conflict with master"合并 master 分支上提交的第二个 commit:
git cherry-pick 23e106b再次出现了冲突:
修改后,提交就可以了:
git add origin.txt git commit -m "fixed add feature conflict with master"注意有时 git commit 操作无法生效,提示你是否提交的一个空的 commit. 原因在于修改后的冲突内容和当前分支的原有内容一样。但这样有些矛盾,取过来别人的 commit,最后却不用。解决办法是,取消 cherry-pick 这个 commit 或者提交一个空的 commit 信息。
总结git merge 是基于两个分支上的最新内容到有冲突的内容之间的所有 commit 进行合并,之后会形成一个新的 commit 记录,将两个分支重新关联起来。