如何将我的git存储库切换到特定的提交

时间:2011-02-09 00:12:48

标签: git

在我的git存储库中,我做了5次提交,如下面的git log:

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)?

5 个答案:

答案 0 :(得分:180)

要创建新分支(本地):

  • 使用提交哈希(或部分)

    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

答案 1 :(得分:97)

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

 git checkout <commit_hash>

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

然后你可能想回到最新的提交&amp;修复分离的HEAD:

Fix a Git detached head?

答案 2 :(得分:55)

如果你想抛出最新的四次提交,请使用:

git reset --hard HEAD^^^^

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

git reset --hard 6e559cb

答案 3 :(得分:14)

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

git checkout -b newbranch 6e559cb95

答案 4 :(得分:2)

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

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

git switch --detach revison