在 Git 中如何撤销掉之前的某一次提交

2024年11月13日技巧分享评论19,003字数 1009阅读3分21秒阅读模式

在 Git 中如何撤销掉之前的某一次提交

今天同事提交了一次修改,我拉取了他的修改继续做了很多工作,并提交了多次。

在准备远程的时候,我审查了下他的代码,发现有严重的问题,那么如果我只想撤回他的那次提交,而保留我之后的提交,该怎么做呢?

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

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

匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定