问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Git撤销提交的五种方法:从revert到reflog的全面指南

创作时间:
作者:
@小白创作中心

Git撤销提交的五种方法:从revert到reflog的全面指南

引用
1
来源
1.
https://www.shejibiji.com/archives/9769

在使用Git进行版本控制时,有时会遇到需要撤销某次提交的情况。本文通过一个实际场景,详细介绍了五种在Git中撤销提交的方法,包括git revert、git reset、git checkout、git reflog以及使用分支备份。每种方法都配有具体的命令示例和适用场景说明,帮助开发者根据实际情况选择合适的方法。

今天同事提交了一次修改,我拉取了他的修改继续做了很多工作,并提交了多次。在准备远程的时候,我审查了下他的代码,发现有严重的问题,那么如果我只想撤回他的那次提交,而保留我之后的提交,该怎么做呢?

可以使用以下几种方法来恢复或处理问题的提交:

1. git revert

git revert 是一种安全的方法,它会生成一个新的提交来撤销特定的提交,而不影响提交历史。这对你只想撤销某个提交的更改,并保留其他更改很有帮助。假设你想撤销的是提交哈希为 abc123 的提交:

git revert abc123

这样会创建一个新的提交来撤销 abc123 的改动。使用 revert 的好处是保留了完整的提交历史记录。

2. git reset

git reset 用于将当前分支的指针重置到指定的提交。如果你在不小心的提交之后并没有新的提交,或者想要删除问题提交之后的所有提交,可以使用以下命令:

  • 软重置(保留工作区的修改):
git reset --soft abc123

这样会将分支指针移到 abc123 的位置,但不会清除工作区的修改,只是取消这些提交。

  • 硬重置(丢弃工作区的所有修改):
git reset --hard abc123

这样会完全回到 abc123 的状态,并删除之后的所有提交以及工作区的修改。

注意,使用 --hard 会丢失未保存的更改,需要小心操作。

3. git checkout

如果你只是需要恢复某个文件到特定提交的状态,而不需要回退整个项目,你可以使用 git checkout 来恢复:

git checkout abc123 -- path/to/file

这会将 path/to/file 恢复到 abc123 提交时的状态。

4. git reflog

如果你已经尝试过一些恢复操作,但想回到更早的某个状态,git reflog 可以帮助你查看最近的操作记录。然后,你可以使用 git resetgit checkout 来恢复到那个操作之前的状态:

git reflog
git reset --hard <reflog上的哈希值>

5. 使用分支备份

在尝试恢复前,可以创建一个临时分支备份当前的状态,这样即使恢复过程中出现问题,也可以轻松恢复当前状态:

git branch backup-branch

然后可以尝试各种恢复操作,避免误操作带来的风险。

选择方案

如果你只需要撤销一次提交而保留其他提交记录,推荐使用 git revert;如果需要回退多个提交,则根据情况选择 git reset --softgit reset --hard

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号