使用git
管理代码版本时,有时需要删除一些本地错误提交的记录,如果待删除记录是最后一条或N条记录,操作很简单,使用如下命令即可:
# 删除本地最后一条记录,如果需要删除最后提交的N条记录,将“1”替换为一个具体的数字“N”即可。
git reset --hard HEAD~1
但生活往往不会太过于简单,有时我们会需要删除提交记录中的某几条,例如,使用git log
命令(小提示:可以使用git log --oneline
查看精简的提交记录)查看得到的提交记录如下:
提示:
# 显示每次修改的文件列表及修改状态
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
会进入如下界面:
注意:1. 界面中的提交记录是以堆栈方式显示的,本地最后一条提交记录显示在最下方,最后一条待删除记录显示在最上方;2. 界面是以vi
打开的,编辑方法与vi
命令相同。
根据前图中的蓝框标记,待删除记录的ID分别为3dd131a
、ec4a612
。使用j
、k
上下移动到pick 3dd131a
与pick 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
保存退出即可:
参考资料: