使用 git 的时候经常会出现一个问题,那就是不小心提交了一个错误的版本,这个时候该怎么办呢?那当然是撤销了,那该怎么撤销呢?
提交未推送到远程仓库撤回
如果你已经添加文件,并且已经提交了,命令如下:
git add .
git commit -m "change something"
这个时候一切都还在自己的电脑中,一切都很好修改。这时通过查找结点,然后倒退回去就可以了,如下:
$ git log
commit 36e4a4a744... (HEAD -> dev)
Author: a <abc@gmail.com>
Date: Sun Jun 30 11:44:50 2019 +0800
change readme
commit 69e996ed43ded...
Author: a <abc@gmail.com>
Date: Sun Jun 30 10:55:06 2019 +0800
change jvmargs
commit 9572301...
Author: a <abc@gmail.com>
Date: Fri Jun 28 00:31:53 2019 +0800
添加资源文件
加入我们要倒退回中间的结点,也就是 change jvmargs 这个结点,那么输入以下命令:
git reset --soft 69e996ed43ded...
这样我们就把推送的东西倒退回来了,这时就可以重新修改再提交了。
注意事项
倒退有两种方法:
git reset --soft
git reset --hard
但是请注意,使用 --soft 的话,仅仅只是把提交信息给倒退回来。但使用 --hard 的话,会把版本信息也倒退回来的。
以上面的提交日志为例:
- 原本项目中有一个 hello.txt 文件,然后你在 change readme 那个提交中增加了一个 world.txt 文件,并且修改了 hello.txt 内容
- 然后提交后发现提交时的注释不对不对,于是撤回修改
- 这时使用 git reset --hard 69e996ed43ded 命令
- 结果发现 hello.txt 修改的内容没有了,world.txt 文件也不见了
当然,如果使用 git reset --soft 则不会
使用 --hard 惨痛案例 https://www.cnblogs.com/hope-markup/p/6683522.html
提交并推送远程仓库撤回
如果已经推送了远程仓库,前几步还是如上面所说的一致。就是推送的时候要添加 -f 来强制更新,清除前面的推送信息,如下:
#如强制撤销并推送至 master 主分支
git push -f
# 或者使用
git push origin master --force
#如强制撤销并推送至 dev 开发分支
git push -f --set-upstream origin dev
Git的4个阶段的撤销更改
http://www.cocoachina.com/articles/21453
手把手带你玩git之各种撤销
https://www.jianshu.com/p/8c22572b84bb