即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

Git 之合并外来代码

编程语言 LaineGates 42℃ 0评论

这两天合并一个段外来代码,这段代码并不在git库中。


于是我如下做:


(1)保存当前状态,建立一个commit


(2)新建一个分支test,把外来代码拷到这里,并commit


(3)合并test,再删除test。


看起来没有问题,但实际错大了!


由一篇 git reset revert rebase 区别 中提过,git为每个文件保存了树状的修改信息链,这个信息链让git的合并操作更加智能,我猜测Git应该是以段为单位来记录的,但怎么个划分法,我没研究过算法,并不清楚。

具体来说,


在分支1的某代码文件中有2个函数A/B;


然后新建分支2,修改函数A->A2,再新建函数C;


回到分支1,新建分支3,修改函数B->B2,并新建函数D;


然后合并分支2和分支3,我们将在这个代码文件中得到函数A2/B2/C/D。


分支大致如下:

分支1----分支2  \
    \---分支3----\ 分支3'

这个过程非常智能对不?但对于我之前的操作流程,就大错特错了。因为我在第一步时保存的commit告诉Git当前的代码是最新信息,当建了一个子分支,并导入外来代码后,这个代码比之前的commit新,也就是说,Git会默认把commit中的代码当作旧代码,而被更加新的外来代码在合并时去掉

我仔细找了Git的合并参数,然而非常无奈地发现,没有相关参数避免这一智能合并,也许是我没有找到吧。

所以,最后,只能记下这一经历,经验如下:


(1)要在一个Git代码库中工作,尽量不要有外来代码


(2)如果必须合并,合并外来代码要非常小心,最好从可以确定的外来代码和库中代码没有冲突的commit-id节点开始,分出两个支,然后再合并

转载请注明:CodingBlog » Git 之合并外来代码

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情