【问题标题】:How can I switch my git repository to a particular commit如何将我的 git 存储库切换到特定的提交
【发布时间】:2011-02-09 00:12:47
【问题描述】:

在我的 git 存储库中,我进行了 5 次提交,如下所示:

commit 4f8b120cdafecc5144d7cdae472c36ec80315fdc
Author: Michael 
Date:   Fri Feb 4 15:26:38 2011 -0800

commit b688d46f55db1bc304f7f689a065331fc1715079
Author: Michael
Date:   Mon Jan 31 10:37:42 2011 -0800

commit b364f9dcec3b0d52666c4f03eb5f6efb7e1e7bda
Author: Michael
Date:   Wed Jan 26 13:33:17 2011 -0800

commit 4771e26619b9acba3f059b491c6c6d70115e696c
Author: Michael 
Date:   Wed Jan 26 11:16:51 2011 -0800

commit 6e559cb951b9bfa14243b925c1972a1bd2586d59
Author: Michael 
Date:   Fri Jan 21 11:42:27 2011 -0800

如何在分支本地回滚我之前的 4 次提交? 换句话说,我如何在没有最近 4 次提交的情况下创建分支(假设我有来自 git log 的那个提交的 SHA)?

【问题讨论】:

    标签: git


    【解决方案1】:

    创建一个新的分支(本地):

    • 使用提交哈希(或其中的一部分)

      git checkout -b new_branch 6e559cb
      
    • 或从 HEAD 返回 4 个提交

      git checkout -b new_branch HEAD~4
      

    在(本地)创建新分支后,您可能希望在同名远程复制此更改:How can I push my changes to a remote branch


    对于放弃最后三个提交,请参阅Lunaryorn's answer below


    对于将当前分支 HEAD 移动到指定提交而不创建新分支,请参阅Arpiagar's answer below

    【讨论】:

      【解决方案2】:

      上述所有命令都会创建一个新分支,并且最新的提交是命令中指定的那个,但如果您希望当前分支 HEAD 移动到指定的提交,下面是命令:

       git checkout <commit_hash>
      

      分离并将HEAD指向指定的提交,并在用户只想查看分支状态直到特定提交时保存创建新分支。


      然后您可能想要返回到最新的提交并修复分离的 HEAD:

      Fix a Git detached head?

      【讨论】:

      • 这会分离头部。不方便。
      • 即使&lt;commit_hash&gt; 位于前面的不同分支中?
      • 链接的问题只对 git checkout master 说,以及可能适用于某些情况的一两个极端情况。
      【解决方案3】:

      如果您想丢弃最近的四个提交,请使用:

      git reset --hard HEAD^^^^
      

      或者,您可以指定要重置为的提交的哈希:

      git reset --hard 6e559cb
      

      【讨论】:

      • 这省略了分支步骤。如果他完全按照此处显示的内容运行,他将永远失去那些最重要的提交。
      • 嗯,不一定是永久的 - 可以通过 git reflog 获取前一个头部的 SHA 并重置回它 - 但它会扔掉它们,是的。
      • 如果提交先被推送然后重置,它们可以通过拉取再次检索。
      • 我建议在运行此命令之前先切换到一个新分支,因为这将删除您最近的所有更改并将您的分支移动到过去的特定提交
      • 它会删除你的全部提交,我认为最好是在特定提交时创建一个新分支。
      【解决方案4】:

      只需签出您希望新分支开始的提交并创建一个新分支

      git checkout -b newbranch 6e559cb95
      

      【讨论】:

        【解决方案5】:

        如何在分支本地回滚我之前的 4 次提交?

        这意味着,您没有创建新分支并进入分离状态。 这样做的新方法是:

        git switch --detach revison

        【讨论】:

        • 这就是我要找的。 checkout 是一个具有太多不同功能的操作。
        猜你喜欢
        • 2011-05-21
        • 1970-01-01
        • 2010-12-09
        • 2019-10-30
        • 2017-06-30
        • 2012-04-05
        • 1970-01-01
        • 1970-01-01
        • 2012-05-01
        相关资源
        最近更新 更多