2021年2月

P分支是很久前fork自Master,Master分支随后演进较多内容。

0,在P分支上,pull最新的分支代码。

1,在P分支上 rebase master。产生很多conflict,P分支的127个commits在Master分支上replay commits。(在rebase过程中ours和theirs和merge时的概念不一样。ours指的master,theirs指的是P分支)
2,每次需要解决冲突,很多冲突是历史commits产生的冲突。没有特别好的解决办法。

git status -uno --short  --ignore-submodules --porcelain | awk '{print $2}' | xargs git checkout --theirs  
git status -uno --short  --ignore-submodules --porcelain | awk '{print $2}' | xargs git add 
git add  git rebase --continue

更简单的办法,在碰到merge或rebase出现大量冲突下,手动处理冲突:

git diff --name-only | uniq | xargs mvim
:n/:prev 切换所有冲突项
:w | n 挨个儿保存切换

3, 这个过程实际上比较无聊。

4,在rebase完成后,确认feature合入完整。中间因为操作失误,合入了一些错误内容,修改之。提交修改。

5,git push失败,原因不是 P分支远程最新(疑问)。按照道理,这个地方应该是最新的才对。(疑。这个地方可能哪里有误操作。

6,重新对使用 git checkout --ours, 以本地修改为主。push到P分支。

总结:

feature的小批量合入,要不是想历史记录和Master保持一致,最简单的办法是直接将feature特性合入Master。然后将Master主线强制覆盖到P分支。但这丢失了真实的commit记录。分支的rebase大多数的时候做不到时间间隔短。

要会使用rebase,checkout,status以及脚本的组合。节约时间做其它事情。

git的三部分:暂存区,index,以及working tree。如果很久不操作一些大工程的合并,容易忘记自己操作的影响。anyway, repeat and google in case you forgot.

想灵活的使用时光机,在合并前,解决冲突前一定要思路清晰。

手工合并冲突是很痛苦的,尤其代码量巨大,而很多代码你还不熟悉的情况下。