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