home > tools > versionControl > git >

git删除某条commit历史记录—代码回滚:reset/revert.rebase三者区别

author:zhoulujun@live.cn    hits:

git无操作,提交了某条历史记录,想在远程删除,怎么办?有时候把错误的代码提交到远程,但是又不想让其他同事看到怎么办呢?

通过命令行删除远程和本地提交记录

git reset回滚某次提交

确保还没其他人提交之前,进行强制回滚

git reset --hard HEAD~2

  •  git reset 代码撤回

  • --hard 和 --soft 

    • --hard就是删除提交记录并不保存所删除记录所做的更改

    • --soft 虽然删除了最近两个提交记录,但是还保存了提交所做的更改

  • 数字代表回退几个版本

git push -f ////强制覆盖

如果别已经提交了代码,怎么删除远程的历史提交记录

删除提交记录中间的提交

git reset --hard 2b93fa8bdc8a1ca8e0c7498bd56460e6d1c408d1 //跟版本号

git push origin HEAD --force

关闭分支的protected权限

但是,你根据上面命令,确无法操作成功,比如报如下提示:

 ! [remote rejected] master -> master (pre-receive hook declined)

这个分支权限被限制了

settings/repository/Protected Branches  ->un protected

git revert放弃某次提交

git revert 之前的提交仍会保留在git log中,而此次撤销会做为一次新的提交。

revert和reset 操作上都差不多,不同的是:

  • git revert 是撤销某次操作,此次操作之前的commit都会被保留

  • git reset 是撤销某次提交,但是此次之后的修改都会被退回到暂存区

  • git reset操作会将版本回退至指定的commit,指定commit后的操作都将被撤销

  • 而git revert则撤销指定commit的修改,同时生成一个新的commit


git rebase 重建提交顺序

git rebase --onto

然后开始删除提交记录2,3[执行 rebase 时会可能遇到冲突,解决冲突不在本文描述范围

git rebase --onto master~3 master~1 master

删除某条commit记录

git rebase -i     d65f0fba23f2113ece6fbb3d104a33a1a8a80406

会进入vim模式,pick改为drop即可,具体操作,查看:https://www.jianshu.com/p/520f8661659c

顺便推荐下:《git中merge还是rebase?git之圣战merge vs rebase 

参考文章:

git reset revert rebase 区别 https://blog.csdn.net/lainegates/article/details/72897693

git reset 、rebase和 revert的区别 https://blog.csdn.net/rebeccachong/article/details/39379703

git reset与git revert的区别 https://segmentfault.com/a/1190000019153248

代码回滚:git reset、git checkout和git revert区别和联系 https://www.cnblogs.com/houpeiyong/p/5890748.html

git reset revert rebase 区别 https://blog.csdn.net/lainegates/article/details/72897693

转载本站文章《git删除某条commit历史记录—代码回滚:reset/revert.rebase三者区别》, 请注明出处:https://www.zhoulujun.cn/html/tools/VCS/git/4828.html