如何改变git,强迫所有冲突的'他们'

时间:2014-10-16 10:55:44

标签: git rebase

我正在尝试将分支 A 重新绑定到相当远的分支 B 上。 我并不真正关心 B 中所做的更改,重要的是 B 的历史记录保持不变并且最终检出了rebase的结果(分支 A',其中 B 将是一个祖先)看起来与 A 完全相同。

我尝试的是

git rebase B -s recursive -X theirs

这似乎会自动解决相当多的冲突,但不幸的是并非全部冲突。 我真的想避免手动逐步完成所有冲突,因为中间有很多提交,而且解决方案总是微不足道。

是否有git命令可以实现此目的?

2 个答案:

答案 0 :(得分:2)

我不确定这里是否合适。如果您基本上想要忽略B所做的任何事情,但将其纳入时间线,那么重点是B的变化是什么?你不能在提交的基础上做这个(这是rebase的作用),因为每次提交都会变空。一个可能的解决方案就是恢复B引入的任何东西并重新加入它。

让我们假设历史是

---X---o---A
    \
     o---o---B

创建一个提交,恢复B在X处分支后所做的任何事情:

git revert A..B
# same as git revert X..B

导致

---X---o---A
    \
     o---o---B---B'

其中B'相当于X.现在是rebase

git rebase B' A

应该在没有任何冲突的情况下工作,从而产生线性历史记录

---X               o---A'
    \             /
     o---o---B---B'

答案 1 :(得分:0)

当您处于每个冲突的步骤中时,您可以执行

git checkout --ours [filename optionally]

(反直觉,我知道!Check this writeup for more info

然后按照惯例跟进

git rebase --continue