赞
踩
git回滚是很常见的操作,但是也很容易出问题,可分为两种情况来看
1. 本地修改/删除了文件(并没有使用git add到暂存区),想放弃修改。
单个文件/文件夹:$ git checkout -- filename
所有文件/文件夹:$ git checkout .
(删除的文件使用此命令会被恢复)
2. 本地新增了文件(并没有git add到暂存区),想放弃修改。
单个文件/文件夹:$ rm filename / rm dir -rf
所有文件/文件夹:$ git clean -xdf //删除当前目录下所有没有track过的文件和文件夹. 不管他是否是.gitignore文件里面指定的文件夹和文件
( 如果文件已经已经git add到暂存区,并不会删除)
3. 本地修改/新增了文件,已经git add到暂存区,想放弃修改。
单个文件/文件夹:$ git reset HEAD filename
所有文件/文件夹:$ git reset HEAD .
(注意,此时只是回到了git add前的状态,并未把修改抹掉)
git reset,回到目标版本,之后的版本会直接消失
$ git reset commit_id,这个id是你想要回到的那个节点,可以通过git log查看,可以只选前6位
(撤销之后,已经commit的修改还在工作区,还需要add,commit,push)
$ git reset --hard commit_id,这个id是你想要回到的那个节点,可以通过git log查看,可以只选前6位
(撤销之后,已经commit的修改将会清除,仍在工作区/暂存区的代码不会清除)
(此时如果用“git push”会报错,因为我们本地库HEAD指向的版本比远程库的要旧)
git revert,创造一个与目标版本相同的新版本
$ git revert -n commit_id,这个id是你想要回到的那个节点,可以通过git log查看,可以只选前6位
(撤销之后,还需要commit,push,这里非常容易出现冲突,需要解决)
其他
如果要单独回滚一个文件file.txt,可以在文件目录使用git reset commit_id file.txt命令,其他原理与上文相同
参考文档
Git撤销&回滚操作,https://blog.csdn.net/ligang2585116/article/details/71094887?utm_source=blogxgwz2
Git恢复之前版本的两种方法reset、revert(图文详解),https://blog.csdn.net/yxlshk/article/details/79944535,(配图来源)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。