git入门(5)-Git revert和git reset版本的回退

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入门(5)-Git revert和git reset版本的回退_第1张图片

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的差异。

你可能感兴趣的:(git)