revert 表示恢复的意思,可以恢复(或者说回退)某次或某段提交(commit),revert后,暂存区会生成一个指定commit修改前样子的文件,然后可以提交一个新的commit达到恢复指定commit的目的。
假如git commit链是: A -> B -> C -> D
恢复某次commit
git revert commitId 表示重新提交某一次commit。
如果想恢复上次(commitD)的提交,可以用HEAD表示:
git revert HEAD
git commit -m "revert D"
执行完 git revert HEAD后,暂存区会生成commitD修改前的样子的文件,然后重新提交,就会生成一个新的commit,这样就达到了恢复指定commit的目的。
此时,commit链就变为了: A -> B -> C -> D->'revert D'
执行完 git revert HEAD后,也有可能出现以下情况,你只需要编辑下描述信息然后保存一下,这样就会生成一个新的commit。
如果想恢复指定commit,比如C的提交,可以执行以下代码:
git revert C
git commit -m "revert C"
此时,commit链就变为了: A -> B -> C -> D->'revert C'
恢复某段commit
git revert -n C^..D 表示重新提交某一段commit,revert后,暂存区会生成一个这段commit修改前的样子的文件。
如果想撤销C和D的提交内容:
git revert -n C^..D
git add -m "Revert C D"
执行完git revert -n C^..D,C和D的提交就会撤销到暂存区,文件内容已经恢复到修改前时的样子,然后执行commit,即可生成一条新的commit到本地仓库。
commit链就变成了这样:
A -> B -> C -> D-> 'Revert C D'
revert与reset的区别
- revert 会生成一个新的提交记录,而reset是直接删除指定的提交
- 在merge老分支时,使用revert,revert的内容不会再被引入,而使用reset,老版本的内容还会被引入。