git 中的各种撤销操作
工作区回滚:文件修改错误
使用 git checkout
命令
1 | 查看指定文件的历史版本 |
暂存区回滚:git add 添加了多余文件
这样的错误是由于直接 go add .
一把梭,把当前目录所有文件都暂存了,不小心就会提交其他文件
撤销操作
1 | 先看一下add 中的文件 |
本地仓库回滚:git commit 了错误文件
如果不小心 弄错了 git add后 , 又 git commit 了,但还没push到远程。
先使用 git log 查看 commit 节点的信息,关键是获取到 commit id
1 | commit xxxxxxxxxxxxxxxxxxxxxxxxxx |
方法一:git reset
使用 git reset commit_id
命令进行本地回滚
git reset commit_id
:mixed 模式,回退到上一个 提交的节点(即目标版本号) 代码还是原来你修改的git reset –hard commit_id
:回退到上一个 commit 节点, 代码也发生了改变,变成上一次的git reset –soft commit_id
:回退到上一个 commit 节点, 工作区和暂存区还是原来你修改的
使用 git reset 会将错误的 commit 节点删除
方法二:git revert
使用 git revert -n commit_id
命令进行本地回滚
-n 参数表示不自动提交 commit,即在撤销了所有指定的 commit 后,不会立即创建新的 commit 记录撤销操作。这样可以让用户手动检查撤销的结果是否正确,并根据需要进行修改、补充等操作,最终再手动提交撤销 commit。
通过 git revert 还原已经提交的修改,此次操作之前和之后的 commit 和 history 都会保留,并且把这次撤销作为一次最新的提交。
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。实际上这是用修改代替删除的一种撤销方式
1 | 撤销前一次 commit |
远程仓库回滚:错误的 commit 已经同步到了远程仓库
针对 git reset
如果使用 git reset 方法回滚的本地仓库,那么远程仓库回滚需要在本地仓库回滚的基础上,进行强制推送即可
-f 即强制推送,因为本地仓库在reset之后,版本比远程仓库低,普通推送无法推送,会报错,需要进行强制提交
1 | git reset --hard 目标版本号 |
针对 git revert
因为使用 git reset 方法并不会将历史的 commit 节点删除,所以能够正常推送
一般而言,这是首选,因为可以规避使用 git push -f
,防止操作失误导致数据丢失
评论