git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销
作为一次最新的commit,如果需要彻底回退,只需要将本次commit
* git revert HEAD 撤销前一次 commit
* git revert HEAD^ 撤销前前一次 commit
* git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次commit进行保存。
* 这时候可以直接使用git push提交本次commit,但是在需要change-ID的场景下,往往会提示需要插入change-ID,按照提示完成插入change-ID的操作后,需要执行
git commit –amend
然后重新push到远程分支。
git维护的代码分为三个部分:当前工作目录,index,git仓库。
工作目录:git的工作目录是保存当前正在工作的文件所在的目录。如果在不同的分支之间切换可能会引起工作目录中文件的变化。
Index:git 索引是工作目录和git库目录之间的暂存区,staging area。
git仓库,就是commit之后的文件,所有的提交都保存于此。
以上可以通过使用git status查看时的文件进行理解:
命令中”Changes to be committed“中所列的内容是在Index中的内容,commit之后进入Git Directory。
命令中“Changed but not updated”中所列的内容是在Working Directory中的内容,add之后将进入Index。
命令中“Untracked files”中所列的内容是尚未被Git跟踪的内容,add之后进入Index。
基于上面的基本概念,我们可以比较快速的理解git reset的概念。
Git reset分为三种,
git reset –mixed 默认方式,不带任何参数的git reset,只保留源码,回退commit和index 信息。
实际在操作时,会提示:
changes not staged for commit:
use “git add …” to update what will be committed
use “git checkout – …” xxxxxxxxxxx
git reset –soft 回退到某个版本,只回退了commit,不会恢复index file一级,如果需要提交直接commit就好。
changes to be commit:
use “git reset HEAD …” to unstage
git reset –hard 回退到某个版本,文件全部回退到当前版本,不可恢复。慎用!!!
另外,我们可以通过git diff查看两次提交之间的差别。其中特别有用的一条命令是:
git diff –cached […]:这个命令初学者不太常用,却非常有用,它表示查看已经add进入index但是尚未commit的内容同最后一次commit时的内容的差异。即index和git directory的差异。