Git-撤销修改

犯错是无法避免的,比如一不小心在readme.txt文件中不小心添加了一行不相关内容:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
My stupid boss still prefers SVN.

在准备提交之前(注意这个提交之前指的是我还没有把修改的readme.txt文件添加到暂存区)我们及时的发现了这个错误,错误发现的很及时,很好纠正,我们把最后一行不相关的内容删除掉
使用 git status查看状态:

在这里我们看到一行我们之前没有见过的提示:git checkout -- file,这个提示的内容翻译过来就是可以丢弃工作区的内容:
git checkout -- readme.txt
这一行命令的意思就是: 把readme.txt文件在工作区的修改全部撤销,这种撤销修改包含两个情况:
第一种:readme.txt自修改之后没有被放到暂存区(stage),现在,撤销修改就回到和版本库中一模一样的状态
第二种:readme.txt已经添加到暂存区后,又对文件作了修改,现在,撤销修改就回到了添加到暂存区的状态
总之,执行git checkout -- file之后就是把这个文件恢复到最近一次的git add或者git commit时的状态

现在看看readme.txt中的内容:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.

文件内容已经被复原了


上面的情况是我们对工作区readme.txt文件修改之后,但是并没有添加到暂存区
现在我们再来看一下另外一种情况,我们不仅对readme.txt文件做了修改,而且修改之后我们还添加到了暂存区(stage)中,也就是上面我们提到的第二种情况,如果我们使用git checkout -- file这个命令,那么执行了这个撤销之后则工作区恢复到添加到暂存区的状态
来操作一波:
修改readme.txt文件中的内容然后我们还一激动给添加到了暂存区,但是在git commit 之前我们发现了这个问题:
使用git status 查看一下,发现文件修改只是被提交到暂存区,还没有提交git commit

在这里,Git同样告诉我们,可以使用git reset HEAD file 可以把暂存区的内容修改撤销掉,重新回到工作区:
git reset HEAD readme.txt
git reset这个命令很熟悉,就是我们之前使用的回退版本的命令,git reset 这个命令不仅可以回退版本,还可以把暂存区的内容撤销回到工作区
再使用git status命令查看一下:     

表示暂存区是干净的,工作区有修改
执行  git reset HEAD readme.txt命令之后,就把暂存区内容回退到工作区,还记得如何撤销工作区的修改吗?
git checkout -- readme.txt

场景一:如果你改乱了工作区某个文件的内容,想直接丢弃工作区的文件修改,可以使用git checkout -- file
场景二:如果你改乱了工作区某个文件的内容,并且将文件修改提交到了暂存区(staqe),想丢弃修改,需要两步执行,第一步先执行git reset HEAD file 命令把暂存区的内容撤退到工作区,然后下一步使用 git checkout -- file 丢弃工作区文件的修改
场景三:如果你改乱了工作区某个文件的内容,并将文件修改提交到了暂存区,并且将暂存区的文件内容提交到了当前分之,这时你想要撤退,就需要使用之前说过的版本回退












猜你喜欢

转载自blog.csdn.net/hpu_yly_bj/article/details/78981926
今日推荐