文章目录
- 工作区 暂存区 本地仓库 远程仓库
- 需求:已推送到远程仓库,想要撤销操作
- git revert (添加新的提交来“反做”之前的更改,云端会残留上次的提交记录)
- git reset(相当于覆盖上次的提交)
- 1.--soft:
- 2.--mixed (默认选项):
- 3. --hard:
- 注意事项
- 说明:
- 参考:
- 附录:git revert的详细说明
工作区 暂存区 本地仓库 远程仓库
需求:已推送到远程仓库,想要撤销操作
git revert (添加新的提交来“反做”之前的更改,云端会残留上次的提交记录)
如果你已经将提交推送到了远程仓库,并且想要撤销这次提交,你可以使用 git revert
命令。
如果你只是要撤销最近的一次提交,可以使用 HEAD 指针来引用它:
git revert HEAD
**请注意,使用 git revert
并不会从项目历史中删除任何提交,这个命令会创建一个新的提交,这个新提交会“反做”之前的提交,从而撤销那些更改。这样做的好处是不会改变项目的历史记录,因此是协作项目中推荐的做法。
git reset(相当于覆盖上次的提交)
如果你需要彻底从历史记录中删除提交,那么需要考虑使用 git reset
并之后使用 --force
选项与远程仓库同步,但这种做法风险较高,因为它会改变项目的历史记录。**
1.–soft:
撤销最后一次提交,但是保留更改在暂存区。提交信息和更改都会撤销,但是更改的内容还在暂存区,可以重新提交。
git reset --soft HEAD~1
2.–mixed (默认选项):
撤销最后一次提交,但是保留更改在工作目录。提交信息会被撤销,更改的内容会保留在工作目录中,需要重新暂存和提交。
git reset --mixed HEAD~1
这是默认的 git reset
行为。它会重置 HEAD 和暂存区到指定的提交,但不改变工作目录。
相当于 git reset HEAD~1
3. --hard:
撤销最后一次提交,并且丢弃所有更改。提交信息和更改都会被永久丢弃,工作目录、暂存区和HEAD都会回退到上一个提交的状态。
git reset --hard HEAD~1
- 如果你使用
--hard
,你将失去最后一次提交的所有更改,这是不可逆的。如果你使用 --soft 或 --mixed,你将保留更改,可以重新提交。
注意事项
-
如果你的更改已经推送到了远程仓库,并且其他人可能已经基于这些更改进行了操作,使用
--hard
重置可能会导致问题。 -
如果你使用
--soft
重置,并且想要撤销更改,你可以使用git clean
来清除未提交的更改:git clean -fd
这个命令会删除未跟踪的文件和目录,
-f
表示强制,-d
表示删除目录。
说明:
git reset 用于移动 HEAD 指针,git reset之后云端仍有上次提交的记录,所以撤销之后的重新提交需要在git push之后加上 -f
用于强制覆盖上次不用的提交。直接git push会出现问题
git push --force
参考:
- git提交错了?别慌,直接删除提交记录:https://blog.csdn.net/weixin_45334346/article/details/138388941
附录:git revert的详细说明
如果你已经将提交推送到了远程仓库,并且想要撤销这次提交,你可以使用 git revert
命令。这个命令会创建一个新的提交,这个新提交会“反做”之前的提交,从而撤销那些更改。这样做的好处是不会改变项目的历史记录,因此是协作项目中推荐的做法。
以下是使用 git revert
命令的步骤:
-
找到要撤销的提交的哈希值:
使用git log
查看提交历史,并找到你想要撤销的提交的哈希值。 -
执行 revert 操作:
使用git revert
命令加上提交的哈希值来撤销这次提交:git revert [提交哈希值]
如果你只是要撤销最近的一次提交,可以使用 HEAD 指针来引用它:
git revert HEAD
-
解决可能出现的冲突(如果有的话):
如果撤销过程中出现冲突,Git 会停止并让你手动解决这些冲突。解决完冲突后,你需要添加这些更改到暂存区并完成 revert 操作:git add [解决冲突的文件] git revert --continue
-
推送 revert 操作到远程仓库:
完成 revert 操作并测试没有问题后,将这次 revert 提交推送到远程仓库:git push origin [分支名]
请注意,使用 git revert
并不会从项目历史中删除任何提交,它只是添加一个新的提交来“反做”之前的更改。如果你需要彻底从历史记录中删除提交,那么需要考虑使用 git reset
并使用 --force
选项与远程仓库同步,但这种做法风险较高,因为它会改变项目的历史记录。