【问题标题】:What are the differences between 'revert', 'amend,' 'rollback', and 'undo' a commit?“还原”、“修改”、“回滚”和“撤消”提交之间有什么区别?
【发布时间】:2015-03-25 20:03:18
【问题描述】:

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

  • 还原
  • 修改
  • 回滚
  • 撤消

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

【问题讨论】:

    标签: git rollback undo git-revert git-amend


    【解决方案1】:

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

    恢复提交...

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

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

    git revert <commit>
    

    修改提交...

    ...表示用具有相同父项的新提交替换“当前”提交;更多详情How does git commit --amend work, exactly?

    请注意

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

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

    git commit --amend
    

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

    回滚...

    ...通常意味着丢弃(或存储)任何本地更改并将分支重置为提交(或简单地检查提交,但这会使您处于分离的 HEAD 状态),然后再提交事情开始的地方弄乱。使用

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

    撤消提交...

    ...可能意味着,取决于上下文,

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

    【讨论】:

    • 什么是回滚而不是还原的好用例?当我不关心记录恢复历史时,我唯一能想到的就是当我将 --hard 重置为原点时。有时您应该使用其中一种,对吗?
    • @BigDreamz 因为重置分支是重写历史的一种形式,如果该历史已经被推送/共享给其他人,你不应该这样做。相比之下,在这方面恢复是完全安全的,因为它只是将提交附加到现有历史记录。
    【解决方案2】:

    撤消更改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 其中 amend 表示添加到最后一次提交。有时我们忘记添加要提交的文件。比如abc.txt文件忘记了,我们可以添加如下:git add abc.txtgit commit --amend -m "New commit message"

    注意:我们没有rollbackundo这个确切的名称,无论是动词还是选项。

    【讨论】:

      【解决方案3】:

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

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

      这是[在此处输入链接描述][1]

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-30
        • 1970-01-01
        • 2014-04-17
        • 2021-10-28
        • 2018-08-31
        • 2010-09-16
        • 2011-03-20
        相关资源
        最近更新 更多