使用revert或reset命令都可以方便的删除最后一次提交, 如下:
git revert HEAD
git push origin master
# 或者
git reset --hard HEAD^
git push origin master -f-f 参数是强制提交,因为reset之后本地库落后于远程库一个版本,因此需要强制提交
使用revert和reset命令的区别在于,
1.revert是放弃指定提交的修改,但是会生成一次新的提交,需要填写提交注释,以前的历史记录都在,而reset是指将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录;
2.reset是删除远程仓库的最后一次提交, 并且不保留历史记录。
最直白的区别在于,假设最后一次提交的记录为A, 那用revert回退版本之后,A记录依然存在,且会生成一条新的记录; 如用reset命令回退则A记录被删除不会存在了。
1.先用git log命令在历史记录中查找到想要删除的某次提交的commit id
2.执行以下rebase命令("commit id"替换为想要删除的提交的"commit id",需要注意最后的^号,意思是commit id的前一次提交)
git rebase -i "commit id"^3.执行该条命令之后会打开一个编辑框,列出了包含该次提交在内之后的所有提交,然后在编辑框中删除你想要删除的提交所在行,然后保存退出就好啦,如果有冲突的需要解决冲突。接下来,执行以下命令,将本地仓库提交到远程库就完成了
git push origin master -f这种情况的解决方法类似于第二种情况,只需要在第二条打开编辑框之后,将你想要修改的提交所在行的pick替换成edit然后保存退出,这个时候rebase会停在你要修改的提交,然后做你需要的修改,修改完毕之后,执行以下命令
git add .
git commit --amend
git rebase --continue如果你在之前的编辑框修改了n行,也就是说要对n次提交做修改,则需要重复执行以上步骤n次。 需要注意的是,在执行rebase命令对指定提交修改或删除之后,该次提交之后的所有提交的"commit id"都会改变。