Git 後悔药:git reset, revert, --amend

本文的内容,需要用的一个非常的操作——查看历史版本号:
git reflog 查找 commit id, reflog = reference log

在《Git 客户端最常用指令记录》中提到了回退操作:

git reset HEAD <file> 撤销刚才的 git add 或 git rm 操作,即将文件从暂存区回退到工作区
git reset HEAD@{n} 对已经 commit 的操作,会将文件从版本库回退到工作区,对文件内容的修改不会丢失
git reset --hard HEAD@{n} 撤销 commit, 功能和上个指令一样,但因多了一个 --hard 参数,对文件内容的修改会丢失
git checkout -- <file> 将工作区的改动全部丢弃

以下专门说明「撤销已经提交的操作」:

git reset --hard HEAD^ 回退到上一个版本
git reset --hard HEAD~5 回退上五个版本的编辑,用 HEAD@{5}也可以
git reset --hard a0561a1 指定重置到 a0561a1 版本,假若刚才删的就是这个版本,该命令相当于取消删除了。

以上这种方式,对于已经 push 过的版本,回退之後将无法在再 push,只能加强制参数 push:
git push -f
在多人协作的模式中,会很不友好,可以考虑使用 revert 指令,这个指令会将内容回复到某个指定的版本,但把 HEAD 指针前移一次。
git revert HEAD^
这种方式比较友好,但可能会需要处理冲突文件,处理完毕後,做一次新的提交。

git commit --amend 修改前一次提交的说明,如果前一次 commit 没有 push,则未来将 push 修改後说明,如果已经 push 了,可以结合前面的 git reset --hardgit push -f 来消除服务器的提交记录。


《Git的撤消操作 - 重置, 签出 和 撤消》http://gitbook.liuhui998.com/4_9.html



Comments