Git 如何撤销(回退)本地提交的 commit

Git 如何撤销(回退)本地提交的 commit

Git 是个非常好的版本工具。但是工具再好,也有出错的时候。就像我们经常会错误的向仓库里面提交一些 commit。这些 commit 还没有推到(push)远程仓库中。想像一下,某天着急下班,把临时写的代码提交保存。第二天来的时候,发现有 bug。这时候想把昨天的提交的修改回退一下。那我们需要怎么做呢?
author
Wonderhows July 21, 2021

Git 是个非常好的版本工具。但是工具再好,也有出错的时候。就像我们经常会错误的向仓库里面提交一些 commit。这些 commit 还没有推到(push)远程仓库中。想像一下,某天着急下班,把临时写的代码提交保存。第二天来的时候,发现有 bug。这时候想把昨天的提交的修改回退一下。那我们需要怎么做呢?

git reset 回退本地提交

比如,我们进行了一个提交:

git commit -m "改了些东西,提交了"

这时候,我们只需要使用如下命令,即可回退这次的提交。

# 回退本地 Git 提交
git reset HEAD~

然后重新编辑你需要的文件,再次提交即可。如果你想使用原来的提交信息,不想重新输入,即改了些东西,提交了。提交时,你可以:

# 使用上次提交的信息
git commit -c ORIG_HEAD

git reset HEAD~回退后,将会保留原来的修改。如果你想把原来的修改全部删除的话,需要使用如下命令:

git reset HEAD~ --hard

git revert 撤消(回退)修改

git reset 将会修改提交历史。多人协作的仓库,如果已经把代码 push 到远程仓库之后,最好不要使用 git reset 来回退修改。这样会使其他人的代码库发生不可预知的意外。我们可以使用 git revert 来实现撤消或回退。

# 撤消上一次的修改,并重新生成一个提交显示当前的撤消
git revert HEAD~

git revert 在撤消修改时,将会生成一个新的提交。这样就会修改 git 的提交历史了。这里需要注意的是,git revert 将给每个回退的提交生成一个新的 revert 提交历史。比如:

# 将生成三个 revert 提交
git revert a1234df b78789kjk c979we

这里我们可能注意到,我们经常使用 HEAD 来标记提交。那么 HEAD是什么?HEAD~, HEAD^, HEAD~1 这些又是什么?请参考我们文章 关于 git header 详细解释

comments powered by Disqus