工作原理
与 git checkout 和 git reset 一样,git revert 也接受一个指定的提交,但它不会将引用指针移动到这个提交。
还原操作采用指定的提交,反转来自该提交的修改并创建新的还原提交。
以下是创建存储库的示例:
mkdir git_revert_example cd git_revert_example/ git init . #Initialized empty Git repository in /git_revert_example/.git/ touch w3docs_file git add w3docs_file git commit -am "oroirnal commit" #[master (root-commit) 299b15f] oroirnal commit #1 file changed, 0 insertions(+), 0 deletions(-) #create mode 100644 onitroad_file echo "oroirnal content" >> w3docs_file git commit -am "add new content to onitroad_file" #[master 3602d88] add new content to onitroad_file #1 file changed, 1 insertion(+) echo "prepended line content" >> w3docs_file git commit -am"prepend content to onitroad file" #[master 86bb32e] prepend content to onitroad file #1 file changed, 1 insertion(+) git log --oneline #86bb32e prepend content to onitroad file #3602d88 add new content to onitroad file #299b15f oroirnal commit
在上述示例中,在新创建的名为 git_revert_example 的目录中初始化了一个存储库。
对存储库有 3 次提交,其中添加了名为 onitroad_file 的文件。
其内容已更改两次。
我们在存储库的末尾使用 git log 来显示提交历史中的所有 3 次提交。
现在我们可以调用 git revert:
git revert HEAD #[master b9cd081] Revert "prepend content to onitroad file" #1 file changed, 1 deletion(-)
如果不传递提交引用,Git revert 将无法工作。
在给定的示例中,它已在 HEAD 引用中传递以还原最后一次提交。
恢复创建一个新的提交,它打开配置的系统编辑器,创建一个新的提交消息。
我们可以使用 git log 并查看添加到先前日志中的新提交:
git log --oneline #2365e21 Revert "prepend content to onitroad_file" #23ab21e prepend content to onitroad_file #3602d88 add new content to onitroad_file #345b23f oroirnal commit
恢复后,第三次提交仍在项目历史中。
git revert 添加了一个新提交来撤消其更改而不是删除。
git revert 选项
-e --edit | 打开配置的系统编辑器,并提示我们在提交恢复之前编辑提交消息。默认选项。 |
--no-edit | 导致恢复不打开编辑器(与-e选项的相反)。 |
-n --no-commit | 为暂存索引和工作目录添加反向修改,而不是创建新提交。 |
说明
git revert 命令是一种“撤消”操作,但它不是合适的操作。
git revert 命令会还原由提交引入的更改,并添加一个新的提交以及生成的反转内容。
这不会让 Git 丢失对修订历史完整性和正确协作至关重要的历史。
恢复用于应用项目历史中的反向提交。
我们可以使用 git revert 自动返回并进行修复。
git重置(Resetting) 与 git恢复(reverting)比较
git revert 仅撤消一次提交,而 git reset 通过删除后续提交恢复到先前的项目状态。
对于已发布到共享存储库的提交,还原被视为安全操作。
恢复的另一个优点是针对历史中随机点的特定提交。
在我们的下一页找到有关 git reset 的详细信息。