使用 git revert 撤消公共提交

git revert HEAD 创建一个与上次提交相反的新提交,并且一个新提交被添加到当前分支:

git log --oneline
23a4b42 Revert "Making some improvements"
234be24 Making some improvements
b235bf4 Make some changes to solver.php
256a81c Create solver.php
3243e12 Initial changes

现在 234be24 提交再次撤消,尽管它仍然存在于历史记录中,但新的 23a4b42 提交与 234be24 中的修改相反。
与之前的结帐方法相反,我们仍然可以使用相同的分支。
这是处理公开共享的存储库的完美“撤消”方法。

查看旧版本

如果要在开始新实验之前查看项目状态,首先必须找到要查看的修订的标识哈希。
我们可以在 git log 命令的帮助下执行此操作:

git log --oneline

如果我们执行上面的命令,我们将获得如下所示的项目历史记录:

b7119f2 Changes in Scrabble Solver
234be24 Fixing search input bug 
b235bf4 Make some changes to solver.php
256a81c Create solver.php
3243e12 Initial changes

使用 git checkout 命令查看我们想要的提交。

git checkout b235bf4

在此之后,我们将有机会查看文件、运行测试等。
即使我们编辑文件,我们也可以确保项目的当前状态不会丢失,因为我们在此处所做的一切都不会保存在存储库中。
执行 git checkout master master 命令返回到项目的当前状态并继续开发。

git checkout master

回到 master 分支,我们可以使用 git revert 或者 git reset 撤消我们想要的任何更改。

说明

与传统的“撤消undo”系统不同,Git 有自己的系统,使用完全不同的术语,其中包括诸如 git clean、git rm、git reset 等术语。

这些命令中的每一个都有特定的功能,用于撤消本地和公共存储库上的更改。

使用 git checkout 撤销提交

git checkout 命令将检出之前的提交,b235bf4,将存储库置于改进提交发生之前的状态。
作为检查的结果,存储库状态将是“分离的 HEAD”。
处于分离状态意味着当分支切换回已建立的分支时,所做的每个新提交都将是孤立的。
孤立提交准备被 Git 垃圾收集器删除,该垃圾收集器在配置的时间间隔内运行,永久破坏孤立提交。
为了避免这种情况,请确保我们在分支上。
从 repo 的分离 HEAD 状态,我们可以调用 git checkout -b new_branch_without_improvement_commit 。
因此,我们将拥有一个名为 new_branch_without_improvement_commit 的新分支并切换到该状态。
现在我们有了一个没有 234be24 提交的新历史时间线。
在这个阶段,当我们不再有 234be24 提交时,我们可以看看一些撤销策略。

撤消公共更改

撤消公共更改的最佳方法是使用 git revert 命令。
切勿为此目的使用 git reset,因为它会删除共享历史记录中的提交。
它旨在撤消对工作目录和暂存索引的本地更改。
Git revert 将保存我们想要撤消的提交,并将创建一个新的提交而不是我们不需要的提交。

撤消已提交的快照

有不同的方法可以撤消提交。
假设我们的提交历史如下所示:

git log --oneline
863fa8e Making some improvements
b235bf4 Make some changes to solver.php
256a81c Create solver.php
3243e12 Initial changes

下面我们将使用不同的方法来撤销 234be24 提交的一些改进。

git暂存索引

暂存索引是 Git 的树之一。
它跟踪在工作目录中提交的更改。
将更改添加到暂存区的命令是 git add。
在这里我们可以使用 git reset 命令来撤消更改。
--mixed reset 将更改从暂存索引推送到工作目录。

撤消未提交的更改

更改在提交到存储库历史记录之前位于暂存索引和工作目录中。
因此,我们可能希望从这两个区域撤消它们。
如果我们想了解有关这两个领域的更多信息,请考虑 git reset。

审查旧提交

创建项目历史提交后,可以查看历史中的所有提交。
审查旧提交的最佳工具被认为是 git 日志。

每个提交都有其标识哈希,用于重新访问提交。

git log --oneline
a3b2a21ad Crossword solver with Vue.js
c54ce0237 New logic for crossword game
3acb8d0de Some changes in crossword logic
de32112e3 Styling crossword table area

默认情况下, git log 仅显示所选分支的提交。
要查看所有分支的所有提交,请运行 git log --branches=* 命令。
使用 git branch 命令访问其他分支。

git 撤销修改和提交

git工作目录

工作目录代表计算机文件系统上的文件,代码编辑器可以使用这些文件使更改生效。
Git 有一些用于管理工作目录的工具,包括 git clean 和 git reset 命令。

git撤消最后一次提交

上述撤消策略在最后一次提交时同样有效。
但在某些情况下,我们不需要删除或者重置最近的提交。
这可能只是做得太快了。
在这种情况下,我们可以通过执行 git commit --amend 来修改最近的提交,一旦在工作目录中进行了更多更改并使用 git add 进行提交。

此时,Git 将打开配置的系统编辑器,让我们修改最后一次提交消息。
这些新更改将添加到更改后的提交中。

使用 git reset 撤消提交

Git reset 是一个综合性的命令,具有多种用途和功能。
执行 git reset --hard b235bf4,提交历史将被重置为该提交。
此时,调用 git log 会显示历史记录是这样的:

git log --oneline
b235bf4 Make some changes to solver.php
256a81c Create solver.php
3243e12 Initial changes
日期:2020-06-02 22:16:36 来源:oir作者:oir