www.cnblogs.com/ruiyqinrui

开源、架构、Linux C/C++/python AI BI 运维开发自动化运维。 春风桃李花 秋雨梧桐叶。“力尽不知热 但惜夏日长”。夏不惜,秋不获。@ruiY--秦瑞

python爬虫,C编程,嵌入式开发.hadoop大数据,桉树,onenebula云计算架构.linux运维及驱动开发.

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  2912 随笔 :: 9 文章 :: 51 评论 :: 185万 阅读

在使用git时,有时候需要回退最新代码到之前的某次提交或某个tag,将中间的所有代码提交去掉。同时保持中间的提交记录。实际应用时发现这个动作没有比较好的实现方式。

例如,如果使用git revert commit-id, 那么只会会退commit-id 对应的那次提交,之后的提交不受影响,仍然存在,不是我们想要的效果。

如果使用git reset, 那操作就比较麻烦,需要使用--hard 和--force 等比较危险的命令,具体如下:

git reset --hard commit-id
git push --force

这样做除了使用比较危险的命令选项外,还有个问题是没法保留中间的提交历史,这不是我们想要的。

搜索发现,利用git diff和git apply可以来比较清晰的完成这个需求,整体的思路是: 1. 得到当前最新提交到回退提交之间的代码diff,将diff保存为文件 2. 利用git apply 将diff作用到代码上,回到之前的代码状态 3. 提交代码

具体来说,假设当前最新提交就在分支current-branch上,回退提交为prev-commit,这个回退提交可以是一次commit id,也可以是一个tag,也可以是一个分支名。执行命令如下:

git checkout prev-commit
git diff current-branch > ~/diff.patch
git checkout current-branch
cat ~/diff.patch | git apply
git commit -am "roll back to prev-commit"
git push

这样就能既回退代码,又保留提交历史。

posted on   秦瑞It行程实录  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2018-11-07 气象数据格式
2016-11-07 modprobe kvm-intel
2015-11-07 联想壁纸下载
2014-11-07 php set env
2014-11-07 基于本地iso 搭建的本地yum源 安装部署openldap
2014-11-07 aix archPlat
2013-11-07 数组
www.cnblogs.com/ruiyqinrui
点击右上角即可分享
微信分享提示