git命令行下回退一个文件到上一个版本

版权声明:欢迎转载 https://blog.csdn.net/feinifi/article/details/85867008

git版本控制在ide中,很方便的回退一个文件,只需要git->revert就可以了。但是有时候,我们会在命令行下操作git。比如部署到生产环境的时候,我们不想打包,而是想通过git pull拉取远程仓库中的文件,但是偶尔需要修改一些文件,这时候如果需要再次拉取,那么就可能会出现冲突错误。

修改的文件处于仓库中最新版本和上次拉取的版本之间。这种问题在开发中如果团队分工出现问题,大家同时修改了一个文件,然后一个人先提交了,而另一个人想要提交或着拉取最新文件的时候就出现冲突了。

[root@buejee webapp]# git pull
Updating 874a967..670bcf6
error: Your local changes to the following files would be overwritten by merge:
        index.html
Please, commit your changes or stash them before you can merge.
Aborting

一般这种问题的解决办法就是恢复文件到上一个版本,然后再拉取最新的代码,然后将自己修改的部分加入到恢复之后并且拉取到最新的文件中,再提交就没有问题了,那么我们需要解决:如何恢复这个文件到上一个版本。

这种需要对单个文件进行回退的解决办法就是使用checkout,这里分为两种情况,默认,我们在命令行下进行的修改是不会把文件git add到缓存中去的,所以一般只需要:

git checkout index.html(文件名),默认情况下,直接git checkout就回退生效了。

还有一种情况,就是如果文件加入到了git缓存中,那么这个命令就不生效了。需要先执行git reset HEAD index.html。

[root@buejee webapp]# git reset HEAD index.html        
Unstaged changes after reset:
M       index.html

这里模拟这种情况:对index.html文件进行修改,增加一行hello。这时候文件就发生了改变。

 

把文件加入到缓存中,然后直接checkout,发现文件还是没有回退,说明checkout没有生效。 

 

当我们执行了git reset HEAD index.html之后,再次执行git checkout index.html,再次查看文件,发现文件恢复了。 

 

猜你喜欢

转载自blog.csdn.net/feinifi/article/details/85867008