在Git中,revert是用来恢复一些修改的。git revert 命令是用来还原一些操作,是一个撤销类型的命令。但它不是一个传统的撤销命令,因为整个过程中不会删除任何数据;相反,它将创建一个具有相反改动的新提交,从而撤销掉指定的提交。本质上看,git revert是一个新的提交。
它在跟踪项目中的bug很有用。如果你想从历史中删除一些东西,那么git revert是一个错误的选择。
此外,我们可以说,git revert 记录了一些新的改动,这些改动与之前的提交刚好相反。要撤销这些改动,请执行下面的命令。
语法:
$ git revert
git revert 选项
Git revert允许附带一些额外的操作,比如编辑、不编辑、清理等等。让我们简单了解一下这些选项。
<commit>
: commit选项是用来恢复一个提交的。要恢复一个提交,我们需要commit参考ID。从git log 命令可以找到commit id。
$ git revert <commit-ish>
<--edit>
:它用于在还原提交之前,编辑commit信息。是git revert命令的一个默认选项。
$ git revert -e <commit-ish>
-m parent-number /--mainline parent-number
:这个选项用来revert merge的结果。一般来说,我们不能revert一个merge,因为我们不知道哪一边的合并应该被认为是主线。我们可以指定父级编号,并允许revert来逆转相对于指定的父级的变化。
-n/--no edit
:这个选项不会打开文本编辑器。它将直接恢复上次的提交。
$ git revert -n <commit-id>
--cleanup=<mode>
:这个清理选项决定了如何从信息中去除空格和注释。
-n/--no-commit
:一般来说,revert命令默认都会提交。no-commit选项将不会自动提交。此外,如果使用这个选项,你的索引不必与HEAD的提交相匹配。no-commit选项有利于连续恢复对你的索引有影响的多个提交。
让我们了解一下如何revert以前的提交。
Git revert前面的提交
假设你对项目中的一个文件(如newfile2.txt)进行了修改。后来,你发现自己在错误的文件或分支中做了错误的提交。现在,你想撤销这些改动,你可以这么做。
Git允许你纠正错误。请看下面的图片。
从上面的输出可以看出,我对newfile2.txt进行了修改。我们可以通过git revert命令撤销它。要撤销这些改动,我们需要commit-id。要检查commit-id,请运行下面的命令。
$ git log
输出:
在上面的输出中,我复制了最近的一次提交来进行还原。现在,我将对这个提交进行还原操作。它的操作方式是:
$ git revert 099a8b4c8d92f4e4f1ecb5d52e09906747420814
上述命令将恢复我的最后一次提交。请看下面的输出:
从上面的输出可以看出,在版本库上做的修改已经被还原了。
Git Revert Merge
在Git中,Merge是一个至少有两个父代的提交。它汇集了多条开发线。在一个工作流程中,功能是在分支中开发的,然后合并到主线中,合并的提交通常有两个主线。
如何Revert一个Merge
通常情况下,revert一个合并被认为是一个复杂的过程。如果做得不对,可能会很复杂。我们将在git revert命令的帮助下撤销一个merge操作。尽管其他一些命令(如git reset)也可以做到这一点。让我们了解一下如何撤销合并。
请看下面的例子:
我在测试中对我的文件design2.css做了一些修改,并将其与test2合并。
输出:
要revert一个merge,我们必须得到它的commit-id。
要检查提交历史,请运行以下命令。
$ git log
上述命令将显示提交历史。
请看下面的输出:
从上面的输出中,复制你要恢复的合并提交,并运行以下命令。
$ git revert <commit reference> -m 1
上述命令将revert合并的操作。这里,-m 1
被用来指定作为主线的第一个父本。合并提交有多个父本。revert需要额外的信息来决定哪一个合并的父本应被视为主线。在这种情况下,可以使用参数-m。
请看下面的输出:
从上面的输出中,我们可以看到,之前的合并已经被还原了。