文章目录
一、问题背景
Git 是分布式的软件管理系统。在把一份代码完成之后发送到 “远程仓库”,可能中间还经历了不同的 “提交阶段”。 本文介绍的是
在不同阶段下
对应的
回退方法
。
二、解决方式
在Git中,一份代码可能处于不同的提交阶段。
一份新修改(或者创建的)文件处于 –
工作区
。
当
git add
之后, 文件会从
工作区
移动到
暂存区
。
当
git commit
之后, 文件会从
暂存区
移动到
本地仓库
。
当
git push
之后,文件会从
本地仓库
移动到
远程仓库
。
关系如图:
(图片来自 菜鸟教程)
1. 回退情况1:文件在工作区进行回退
这里指的是文件没有经过任何提交,仅仅只是保存。但是保存完之后发现需要回退一下代码。
此时可以使用
git checkout -- filename
进行回退。(危险动作,三思)
2. 回退情况2:文件在暂存区进行回退
这里指的是文件经过
git add
指令之后进入了暂存区。
此时可以使用
git reset HEAD
指令将暂存区的文件回退到修改之前的状态。(危险动作,三思)
3. 回退情况3:文件在本地仓库进行回退
例如情况如下:
这里指的是文件经过
git commit
指令之后进入了本地仓库。
此时可以使用
git log
查看本次提交之前的版本,并记住想要回退的版本的id。
然使用
git reset --hard commit_id (这里是 8c12)
指令将暂存区的文件回退到修改之前的状态。
4. 回退情况4:文件已经在远程仓库中
这里指的是文件经过
git push
指令之后进入了远程仓库。
一种补救的方法就是修改错误的版本,push一个新的上去就行。
另一种和3类似,通过
git reset --hard commit_id
回退本地版本,然后把旧的版本重新push上去。然而,此时的问题就是此时本地的版本落后于远程的版本。因此直接再使用
git push
的话是失败的:
此时可以加上
-f
来强制推:
git push - f
这样就可以了。
版权归原作者 zsiming 所有, 如有侵权,请联系我们删除。