Git 之合并外来代码

这两天合并一个段外来代码,这段代码并不在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节点开始,分出两个支,然后再合并

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值