关于git:“恢复”,“修改”,“回滚”和“撤消”提交之间有什么区别?

What are the differences between 'revert', 'amend,' 'rollback', and 'undo' a commit?

虽然我经常使用git,但我还是个初学者。

有时候,我犯了一个错误,但只有在我犯了错误之后才发现它。在这一点上,我通常要花很长时间在互联网上寻找我应该用来摆脱它的命令(在推之前)。

每次发生这种情况,我都会想,我通常遇到的四个术语之间的区别是什么:

  • 还原,
  • 修改,
  • 回降,
  • 撤消。

我已经到了最后一次了解这些差异的时候了。他们是什么?


术语的恢复和修订在Git中具有明确的含义。相反,rollback和undo没有这样一个定义明确的含义,并且易于解释。

正在还原提交…

…意味着(在当前分支上)创建一个新的提交,应用另一个提交引入的反向更改。这是纠正回购协议中已与其他人共享的问题的首选方法,因为它不涉及任何破坏(即重写历史)。

要恢复由标识的提交,只需运行

1
    git revert <commit>

修改承诺…

…意味着将"当前"提交替换为具有相同父级的新提交;更详细的内容是Git提交如何修改工作,准确地说?

enter image description here

注意

  • 修改您已经推送到共享远程的提交是一种糟糕的实践,因为它是一种历史重写形式(它"删除"最新的提交,而您的合作者可能已经基于该提交进行了工作);
  • 您只能修改给定分支上的最后一个提交;要重写较旧的提交,您需要拿出大炮(例如交互式重新平衡)。

    要修改提交,请进行所有必需的更改并进行阶段化,然后运行

    1
    git commit --amend

    这里不需要指定任何提交,因为当前分支上的最后一个提交是将要修改的提交。然后,您的编辑器将弹出,给您机会修改提交消息。

正在回滚…

…通常意味着在提交之前丢弃(或存储)任何本地更改,并将分支重置为提交(或简单地签出提交,但这会使您处于分离的头部状态),在提交之前,事情开始变得混乱。使用

1
    git reset <commit-before-things-started-to-go-belly-up>

撤消提交…

…可能意味着,根据上下文,恢复或修改提交。


撤销变更:git checkoutgit revertgit resetgit clean

  • git revert:此命令恢复提交的更改。它在日志中维护跟踪记录。
  • git reset:此命令恢复提交的更改。它不在日志中维护跟踪记录,即重置为恢复的提交。注:这是一个破坏性的功能。必须小心使用此命令。

    • git reset --soft HEAD^撤消上次提交,将更改放入临时
    • git reset --hard HEAD^撤消上次提交和所有更改
    • git reset --hard HEAD^^撤消最后2次提交和所有更改
  • git commit --amend其中修正意味着增加最后一次承诺。有时我们忘记添加要提交的文件。例如abc.txt文件被遗忘,我们可以添加如下内容:git add abc.txtgit commit --amend -m"New commit message"


git—修正您应该只对提交使用git--amend命令,而提交尚未被推送到另一个git存储库的公共分支。git--amend命令创建了一个新的提交ID,人们可能已经将他们的工作基于现有的提交。在这种情况下,他们需要根据新的提交迁移他们的工作。

Git还原您可以通过git revert命令恢复提交。此命令还原提交的更改。这样的承诺对于记录变更被撤回是有用的。

这里是[在此处输入链接说明][1]

[1]:如何将Git存储库回滚(重置)到特定的提交?关于回滚技术