git merge覆盖当前分支
有这么一种场景,我们需要 merge 某个 feature 分支到 master 分支,且希望合并后master 分支与 feature 分支的内容完全一致。
当 feature 分支与 master 分支没有分叉时,直接 merge 即可,默认执行 fast-forward 后两个分支指向同一个 commitid。而当 feature 分支与 master 分支存在分叉时,git 没有对应的命令或参数来完成目标。
查看 git merge 可以通过-s
参数指定合并的策略,其中有个ours
策略,合并其他分支的同时可以保持合并后的内容与当前分支一致。这个策略与我们的目标完全相反。但是 git merge 并没有提供theirs
策略。
相似的是,在recursive
合并策略中,可以通过-X
参数指定遇到合并冲突时的解决方式,其选项可以为ours
或者theirs
,即冲突时使用当前分支的版本或者合并分支的版本。但是我们并不能通过recursive
策略配合-X theirs
来实现我们的目的,因为-X
仅在遇到冲突时起作用。如果master分支上的某个 commit 与 feature 分支没有冲突,那么合并后该 commit 会保留下来,而这是 feature 分支不需要的。
目前而言,我们只能使用一些迂回操作来实现类似theirs
策略。
- 先在 master 上创建一个无意义的 merge commit,commit 的内容不重要,因为后续将要通过 amend 修改。