git revert
git revert
命令可以被视为“撤销”类型的命令,但是,它不是传统的撤销操作。但它不是从项目历史记录中删除提交,而是解决如何还原提交引入的变更,并用生成相反内容附加一个新的提交。这可以防止 Git 丢失历史记录,对于维护修订历史记录的完整性以及可靠的协作都非常重要。
当您想应用项目历史记录中提交的反向操作时,应该使用还原。例如,如果您正在跟踪一个错误并发现它是由一次提交引入的,那么这可能会很有用。您可以使用 git revert
自动为您完成所有这些操作,而不是手动进入、修复并提交新的快照。
工作原理
git revert
命令用于撤销对存储库提交历史记录的变更。诸如 git checkout 和 git reset 等其他“撤销”命令可将 HEAD
和分支引用指针移至指定的提交。git revert
也会接受指定的提交,但是 git revert
不会将引用指针移到此提交。还原操作将接受指定的提交,撤销该提交的变更,然后创建新的“还原提交”。之后,引用指针将更新以指向新的还原提交,使其成为分支的顶端。
为了演示,我们使用下面的命令行示例创建一个示例代码存储库:
$ mkdir git_revert_test
$ cd git_revert_test/
$ git init .
Initialized empty Git repository in /git_revert_test/.git/
$ touch demo_file
$ git add demo_file
$ git commit -am"initial commit"
[main (root-commit) 299b15f] initial commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 demo_file
$ echo "initial content" >> demo_file
$ git commit -am"add new content to demo file"
[main 3602d88] add new content to demo file
n 1 file changed, 1 insertion(+)
$ echo "prepended line content" >> demo_file
$ git commit -am"prepend content to demo file"
[main 86bb32e] prepend content to demo file
1 file changed, 1 insertion(+)
$ git log --oneline
86bb32e prepend content to demo file
3602d88 add new content to demo file
299b15f initial commit
相关资料
Git 速查表
查看解决方案
了解 Bitbucket Cloud 的 Git
在这里,我们已经在新创建的名为 git_revert_test
的目录中初始化了一个代码存储库。我们已经向代码存储库提交了 3 次,我们在其中添加了一个 demo_file
文件,并对其内容进行了两次修改。在代码存储库设置过程结束时,我们调用 git log
来显示提交历史记录,共显示 3 次提交。在代码存储库处于这种状态的情况下,我们已经准备好启动 git revert
。
$ git revert HEAD
[main b9cd081] Revert "prepend content to demo file" 1 file changed, 1 deletion(-)
Git revert
需要传入提交引用,没有提交引用就无法执行。这里我们传递了 HEAD
引用。这将还原最新的提交。这与我们还原提交 3602db8815dbfa78cd37cd4d189552764b5e96c58
的行为相同。与合并类似,还原将创建新的提交,这将打开配置的系统编辑器,提示输入新的提交消息。输入提交消息并保存后,Git 将恢复运行。我们现在可以使用 git log
检查代码存储库的状态,看看之前的日志中添加了一个新的提交:
$ git log --oneline 1061e79 Revert "prepend content to demo file" 86bb32e prepend content to demo file 3602d88 add new content to demo file 299b15f initial commit
请注意,在还原后,第 3 次提交仍保留在项目历史记录中。git revert
没有将其删除,而是添加了一个新的提交来撤销其变更。因此,第 2 次和第 4 次提交代表完全相同的代码库,而第 3 次提交仍然存在于我们的历史记录中,以防我们想返回使用。
常用选项
-e
--edit
这是默认选项,无需指定。此选项将打开已配置的系统编辑器并提示您在提交还原之前编辑提交消息
--no-edit
这与 -e
选项相反。还原不会打开编辑器。
-n
--no-commit
传递此选项将阻止 git revert
创建与目标提交相反的新提交。此选项不会创建新的提交,而是将反向变更添加到暂存索引和工作目录中。这些是 Git 用来管理存储库状态的其他树。有关更多信息,请访问 git reset 页面。
重置与还原
请务必要了解,git revert
撤销单个提交—它不会通过删除所有后续提交来“恢复”到项目的先前状态。在 Git 中,这实际上被称为 reset,而不是 revert。
摘要
git revert
命令是一种向前移动的撤销操作,它提供了一种撤销变更的安全方法。还原不会删除提交历史记录中的提交,也不会使其成为孤立的提交,而是创建一个新的提交,该提交会撤销指定的变更。在丢失工作方面,git revert
是比 git reset
更安全的替代方案。为了演示 git revert
的效果,我们利用了其他命令,这些命令在其各自的页面上都有更深入的文档说明:git log、git commit 和 git reset。
分享此文章
下一主题
推荐阅读
将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。