记一次commit回退

背景

以前改完代码匆匆push到我fork的仓库上。而后才发现有个commit提交了一些不应提交的配置文件。git

怎么解决

想要把这个commit去掉,我是直接: 缓存

git revert 001c67(001c67是你要回退到指定历史的版本号)指针

而后push到远程指定分支上:源码

git push origin masterit

git revert说明

git revert是用一个新commit来消除一个历史commit所作的修改,revert 以后你的本地代码会回滚到指定的历史版本。也就是说revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的。ast

git reset

若是是要去掉还没push的commit,建议仍是用reset,具体操做:配置

git reset --hard 001c67(你要干掉的commit的版本号)file

这个命令表示:完全回退到某个版本,本地的源码也会变为上一个版本的内容总结

 

git reset的默认方式是:git reset --mixed,当它回退到某个版本时,只保留源码,回退commit和index信息配置文件

 

还有一种是git reset --soft:它回退到某个版本时,只回退了commit的信息,不会恢复到index file一级。若是还要提交,直接commit便可

 

简单总结一下,其实就是三个不一样的恢复等级,--soft 、--mixed以及--hard。使用--soft就仅仅将头指针恢复,已经add的缓存以及工做空间的全部东西都不变。若是使用--mixed,就是将头指针恢复掉,已经add的缓存会丢失掉,工做空间的代码什么的是不变的。若是使用--hard,那么一切就全都恢复了。

 

git reset比较经常使用的场景:合并最近几个commit:

好比我提交了5个commit,这时候我想把这5个commit做为一个commit提交到远程分支,能够先把那5个commit撤下来,以下:
git reset HEAD~5
上面命令是指撤下最近的5个commit, 撤下来之后,这5个commit相关的文件都在工做台了,只须要从新add,commit,便可。
注意: 若是commit已经push到远程分支了,这时候咱们撤下来再push会失败,须要加上-f,如:
git push -f origin xxx_dev