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

mic*_*ael 169 git

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

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
Run Code Online (Sandbox Code Playgroud)

如何在分支机构本地回滚我之前的4个提交?换句话说,如何在没有最新的4次提交的情况下创建分支(假设我从git log获得了该提交的SHA)?

Art*_*cto 201

要创建新分支(本地):

创建新分支(本地)后,您可能希望在具有相同名称的远程上复制此更改:如何将更改推送到远程分支


丢弃最后三次提交,请参阅下面的Lunaryorn的答案.


对于当前分支头移动无需创建一个新的分支指定的提交,请参阅下面Arpiagar的答案.


小智 118

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

 git checkout <commit_hash>
Run Code Online (Sandbox Code Playgroud)

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


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

修复一个Git分离的头?

  • 这会使头部分离。不方便。 (2认同)
  • 链接的问题只是说 **`git checkout master`**,以及可能适用于某些情况的一两个边缘情况。 (2认同)

lun*_*orn 61

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

git reset --hard HEAD^^^^
Run Code Online (Sandbox Code Playgroud)

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

git reset --hard 6e559cb
Run Code Online (Sandbox Code Playgroud)

  • 这省去了分支步骤.如果他完全按照这里显示的那样运行,他将永久失去那些最重要的提交. (3认同)
  • 好吧,不一定是永久性的 - 一个人可以通过`git reflog`获得前一个头的SHA并重置回它 - 但它会扔掉它们,是的. (3认同)
  • 如果先推送提交然后重置,则只需拉取即可再次检索它们。 (2认同)

rad*_*mir 28

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

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

git switch --detach revison


Kin*_*nch 16

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

git checkout -b newbranch 6e559cb95
Run Code Online (Sandbox Code Playgroud)


小智 13

使用新的git switch命令,我们可以:

  • git switch -c <new-branch> <commit>创建一个新分支,命名<new-branch>为起始于<commit>
  • git switch --detach <commit>切换到提交以进行检查和可丢弃的实验。有关详细信息,请参阅分离头