vlambda博客
学习文章列表

Git,那些“后悔药”你知道么?

在使用 Git 的过程中,有时会不小心丢失 commit 信息。或者一顿操作,把不该提交的文件也提交了。或者提交日志干脆来个 hello world。而这些一经被发现,后果很严重。当然牛逼的 Git 总会给我们解药,以求改变历史。但是你知道这些“解药”么?

本文就上述几个疑问,整理成一个小短文,建议读者收藏。哪一天,哦 No,应该没有那么一天...

reset后丢失恢复

通常最快捷的办法是使用git reflog工具。当你 (在一个仓库下) 工作时,Git 会在你每次修改了 HEAD 时悄悄地将改动记录下来。当你提交或修改分支时,reflog 就会更新。git update-ref 命令也可以更新 reflog。常规步骤:

  1. 先用 reflog 看看记录的所有 HEAD 的历史: git reflog

  2. 然后找到那个 SHA,进行恢复: git reset --hard 98abc5a

撤销 commit

写完代码后,很愉快的敲下了如下:

$ git add .

$
 git commit -m "本功能全部完成"

执行完 commit 后,想撤回 commit,怎么办?

执行:

git reset --soft HEAD^

这样就成功撤销了你的 commit

注意,仅仅是撤回 commit 操作,您写的代码仍然保留。

reset 参数说明:

--mixed

意思是:不删除工作空间改动代码,撤销 commit,并且撤销git add .操作 这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

--soft

不删除工作空间改动代码,撤销 commit,不撤销 git add .

--hard

删除工作空间改动代码,撤销 commit,撤销 git add .

注意完成这个操作后,就恢复到了上一次的 commit 状态。

改一下注释

如果 commit 注释写错了,只是想改一下注释,只需要:

$ git commit --amend

此时会进入默认 vim 编辑器,修改注释完毕后保存就好了。