记一次commit回退

背景

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

怎么解决

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

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

然后push到远程指定分支上:

git push origin master

git revert说明

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

git reset

如果是要去掉还没push的commit,建议还是用reset,具体操作:

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

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

 

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

 

posted @ 2016-08-28 16:06  大豪。  阅读(864)  评论(0编辑  收藏  举报