查看原文
其他

开发者说丨Git删除本地任意提交记录的方法

贺志国 Apollo开发者社区 2022-07-29


Git是一款免费、开源的分布式版本控制系统,可以敏捷高效地处理任何或小或大的项目。


在项目实际开发过程中,可能由于疏忽,上传了一些敏感信息,例如测试的账户名与密码,但是后续的工作需要将项目公开,为了避免信息泄露,那么必须清除Git的提交历史记录。


本文由社区荣誉布道师——贺志国撰写Git删除本地任意提交记录的方法进行了详细讲解,希望这篇文章能给感兴趣的开发者带来更多帮助。



  以下,ENJOY  



使用git管理代码版本时,有时需要删除一些本地错误提交的记录,如果待删除记录是最后一条或N条记录,操作很简单,使用如下命令即可:


1# 删除本地最后一条记录,如果需要删除最后提交的N条记录,将“1”替换为一个具体的数字“N”即可。
2git reset --hard HEAD~1

<左右滑动以查看完整代码>


但生活往往不会太过于简单,有时我们会需要删除提交记录中的某几条,例如,使用git log命令(小提示:可以使用git log --oneline查看精简的提交记录)查看得到的提交记录如下:




1# 显示每次修改的文件列表及修改状态
2git log --name-status 
3# 显示每次修改的文件列表
4git log --name-only 
5# 显示每次修改的文件列表及文件修改的统计
6git log --stat 
7# 显示每次修改的文件列表
8git whatchanged 
9# 显示每次修改的文件列表及统计信息
10git whatchanged --stat
11# 显示最后一次的文件改变的具体内容
12git show 

<左右滑动以查看完整代码>


需要删除图中用蓝色框标注的两条记录,这时该怎么办呢?


首先找到最后一条待删除记录的前一条记录ID,a8547a8beb2a11efc80a0594ebb2da21ced10439(实际处理时没必要写这么长,只写前面几位a8547即可,具体需要的长度无法指定,确定原则就是确保记录ID能唯一标识),接下来执行如下命令:


1git rebase -i a8547

<左右滑动以查看完整代码>


会进入如下界面:



注意:1. 界面中的提交记录是以堆栈显示的,本地最后一条提交记录显示在最下方,最后一条待删除记录显示在最上方;2. 界面是以vi打开的,编辑方法与vi命令相同。


根据前图中的蓝框标记,待删除记录的ID分别为3dd131aec4a612。使用jk上下移动到pick 3dd131apick ec4a612,再使用cw命令将行首的pick替换为drop注意每完成一个替换操作,需要按下Esc键退出vi的编辑模式)。检查确认后,按wq保存并退出,接下来就等待git为我们删除上述两条选中的提交记录,顺利完成后的提示如下所示:



可以使用git log命令检查确认上述两条记录已被删除:



当然,也有可能会出现无法删除某条记录的情况,例如,删除记录2f18f01就会出现如下错误:



解决方法当然就是按照提示,要么人工解决冲突后,使用git rebase --continue继续变基,要么就是使用git rebase --skip忽略问题(强烈不建议,因为极有可能无法变基成功,即使成功也会出现很大的隐患),要么使用git rebase --abort终止变基。



git rebase -i命令还可以用来调整本地提交记录的顺序,方法很简单,在如下界面中使用vi的操作命令修改提交记录的顺序,按wq保存退出即可:



以上是本次开发者投稿的全部内容,更多话题讨论、技术交流可以扫描下方二维码添加『Apollo小哥哥』为好友,进开发者交流群。






* 以上内容为开发者原创,不代表百度官方言论。

内容来自CSDN:

https://blog.csdn.net/davidhopper/article/details/95597551,欢迎大家收藏点赞。已获开发者授权,原文地址请戳阅读原文。






您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存