开始我还是一如既往的说一点废话,故事是这么开始的 工作进入了高强度的搬砖生活,上周一包工头(老板)突然说这周又来了 12 车新砖头,我们抬头看了看这火辣辣的太阳,感觉砖头有点烫手,不过想起这一毛钱一个的砖头又感到十分欣慰…
emmmm… 有点扯远了,主要原因吧就是这周上线 12 个 APP 其实如果老老实实的 CP 代码其实也是可以的,但是我可能有点怎么说呢反正不是这么老实的人,前两天搞了一个 shell 脚本一键创建(CP)项目,但是主项目还在修复 BUG 每一次修复之后我负责的全部项目又全部需要拷贝一次代码虽然没多大难度但是我觉得实在无聊,于是我刚开始萌生一个想法:在主项目下给我的项目创建一个分支然后每次主项目只要有新的提交我就把相应的代码提交同步到子分支这样不会覆盖掉子分支的代码同样又同步了新的代码,只是比较不好的地方就是需要在不同分支来回切换,但是相对于手动复制的傻瓜式 copy 工程师要爽得多了,但是我把这个想法推荐给同事得时候却遭到拒绝他说要老板同意这么搞才这么搞,然后我脑袋一热就傻傻的拿着这个天真的想法去找了老板(我老板是个技术大牛),我本来以为老板会同意的,然后然后又是一顿打击,emmmmm… (这个方案被老板拒绝了,原因我现在还没想通,老板说的是我格局理解错了…)在我十分郁闷之时,然后老板给我指明了一条新道路,没错就是今天的主角 Git 打补丁 patch 和 diff
首先明确一下我的目标把 A 项目的某一个 commit 给同步到 B 项目甚至更多项目
我这里就不讲太多理论,文档网上一搜一大把,直接把我操作的一步步贴上来
使用 git log 命令查询 commit id
cd A项目路径
git log
// 进去之后需要退出按Q
commit 后面一串长长的字符就是 commit id 了,选中复制,然后我们看看 git format-patch 打包命令
git format-patch -1 5dcc494366ab66666666667b167007b79fbc4aae
git format-patch 后面的 ( -1 )是指打包 5dcc494366ab66666666667b167007b79fbc4aae 包含这个提交之前的多少个提交
打包成功后会在当前目录下生成一个或者多个 .patch 为后缀的文件,我们在 data 目录下创建一个 patch 目录并把这个补丁包移动到 /data/patch/ 目录下,好让我们快速同步到其他项目
mv *.patch /data/patch/
然后我们进入B项目开始打补丁
cd B项目地址
git am /data/patch/*.patch
使用 git am 命令会自动合并代码,当然如果出现冲突还是需要自己去手动解决的,如果没有问题就会自动把代码合并并且 commit 好,你只需要 git push 一下就好啦…