2021年2月
string的c_str方法
string的c_str方法返回的值,在调用非const方法后就不靠谱了。需要注意。
一次版本rebase过程
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.
想灵活的使用时光机,在合并前,解决冲突前一定要思路清晰。
手工合并冲突是很痛苦的,尤其代码量巨大,而很多代码你还不熟悉的情况下。