前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >git 回滚代码并保留提交历史

git 回滚代码并保留提交历史

作者头像
王云峰
发布2023-10-23 10:36:30
2030
发布2023-10-23 10:36:30
举报

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

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

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

代码语言:javascript
复制
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,也可以是一个分支名。执行命令如下:

代码语言:javascript
复制
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

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

参考

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档