'revert'、'amend,' 'rollback' 和 'undo' 之间的区别是什么?

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

为了帮助我了解 git 以便我可以日常使用它,有什么区别:

他们是什么人,他们做什么?

git --amend 您应该仅对尚未推送到另一个 Git 存储库的 public 分支的提交使用 git --amend 命令。 git --amend 命令创建一个新的提交 ID,人们可能已经将他们的工作建立在现有提交的基础上。 在这种情况下,他们需要根据新的提交迁移他们的工作

git 还原 您可以通过 git revert 命令还原提交。此命令还原提交的更改。 此类提交对于记录更改已撤回很有用。

这里是[在此处输入 link 描述][1]

[1]:How do you roll back (reset) a Git repository to a particular commit? 关于回滚技术

术语 revertamend 在 Git 中具有明确定义的含义。相比之下,rollbackundo 没有这么明确的含义,可以解释。

正在还原提交...

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

要还原由 <commit> 标识的提交,只需 运行

git revert <commit>

修改提交...

...意味着用具有相同父项的新提交替换“当前”提交; How does git commit --amend work, exactly?

中有更多详细信息

请注意

  • 修改你已经推送到共享远程的提交是不好的做法,因为它是一种历史重写形式(它“删除”最近的提交,你的合作者可能已经基于他们的工作) ;
  • 您只能修改给定分支上的最后一次提交;要重写旧的提交,您需要拿出大手笔(例如交互式变基)。

要修改提交,进行所有必需的更改并暂存它们,然后 运行

git commit --amend

此处无需指定任何提交,因为当前分支上的最后一次提交将被修改。然后您的编辑器将弹出,让您有机会修改提交消息。

正在回滚...

...通常意味着丢弃(或隐藏)任何本地更改并将分支重置为提交(或简单地签出提交,但这会使您处于 detached-HEAD 状态)在提交之前事情开始变得一团糟。使用

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

撤消提交...

...根据上下文可以表示

  • 还原 提交,
  • 修改一个提交,
  • 通过交互式 rebase 删除提交。

撤消更改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"

注意:我们也没有rollbackundo这个确切的名字动词或选项。