Git删除本地任意提交记录的方法

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

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

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

提示:

# 显示每次修改的文件列表及修改状态
git log --name-status 
# 显示每次修改的文件列表
git log --name-only 
# 显示每次修改的文件列表及文件修改的统计
git log --stat 
# 显示每次修改的文件列表
git whatchanged 
# 显示每次修改的文件列表及统计信息
git whatchanged --stat
# 显示最后一次的文件改变的具体内容
git show 

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

git rebase -i a8547

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

根据前图中的蓝框标记,待删除记录的ID分别为3dd131aec4a612。使用jk上下移动到pick 3dd131apick ec4a612,再使用cw命令将行首的pick替换为drop(注意每完成一个替换操作,需要按下Esc键退出vi的编辑模式)。检查确认后,按wq保存并退出,接下来就等待git为我们删除上述两条选中的提交记录,顺利完成后的提示如下所示:
3
可以使用git log命令检查确认上述两条记录已被删除:
4
当然,也有可能会出现无法删除某条记录的情况,例如,删除记录2f18f01就会出现如下错误:
5
解决方法当然就是按照提示,要么人工解决冲突后,使用git rebase --continue继续变基,要么就是使用git rebase --skip忽略问题(强烈不建议,因为极有可能无法变基成功,即使成功也会出现很大的隐患),要么使用git rebase --abort终止变基。

题外话

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

参考资料:

  1. Git 删除某个历史记录 https://blog.csdn.net/weixin_33756418/article/details/87271116
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值