James Blogs

简介


由于硬件方案的更换,需要去掉一些外设改用mcu内部实现,而这种mcu实现的方式在之前已经做过了,所以想直接回滚代码到对应的版本。但是由于时间间隔太长,后面固件已经新增了其它功能,这些功能需要被保留下来。

步骤


  1. 使用git log找到之前的版本,记录下版本编号,假如是3e4d37f

  2. 在命令行输入以下命令,得到历史版本到当前版本有差异的文件清单,并保存为diffFiles.text文件(⚠️注意将版本编号替换为实际版本编号)

    git diff 3e4d37f |  grep 'diff --git' | awk '{print $3}' > diffFiles.text
    

    文件内容大概这样,建议使用替换工具去掉开头的a/

    Untitled

  3. 复制一个文件名,按Ctrl + P (OSX 是command + P)打开文件。然后打开左下角时间线视图,找到对应的版本再点击选择以进行比较 ,再点击最新一个版本选择与已选项目进行比较 。这时候会出来一个当前文件与要回滚版本文件的差异对比,工具差异对比修改当前文件,完成后回到diffFiles.text 文件进行标记(比如文件名后面写个👌)。

    Untitled

    Untitled

  4. 重复上一步,直到所有涉及到的文件都修改完毕,最后记得删除diffFiles.text文件。

总结


就算是现代的版本管理工具如此好用,同时修改很多不相关的文件也很麻烦,并且很容易出错。

希望读者朋友在遇到此类问题的时候谨慎处理,修改后进行review或者对可能影响到的模块进行集成测试。

当然,更希望你们接到类似需求的时候就能及时发现问题,选择一种最正确的方式开发,而不是像我一样回滚代码。