在我的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日志中提交的SHA)?


当前回答

上面所有的命令都创建了一个新的分支,并且最新的提交是命令中指定的,但是为了防止你想让你当前的分支HEAD移动到指定的提交,下面是命令:

 git checkout <commit_hash>

它分离并将HEAD指向指定的提交,当用户只想查看特定提交前的分支状态时,它就不必创建新的分支了。


然后你可能想要回到最近的提交并修复分离的HEAD:

修复Git分离的头?

其他回答

如果你想扔掉最近的4次提交,使用:

git reset --hard HEAD^^^^

或者,你可以指定一个你想要重置的提交的哈希值:

git reset --hard 6e559cb

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

Git switch -c <new-branch> <commit>创建一个名为<new-branch>的新分支,从<commit>开始 Git开关——detach <commit>切换到提交检查和可丢弃的实验。详情见分离式磁头。

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

使用提交散列(或其部分) Git checkout -b new_branch 6e559cb 或者从HEAD返回4个提交 git checkout -b new_branch HEAD~4

一旦(本地)创建了新分支,您可能想要在同名的远程上复制此更改:如何将更改推到远程分支


关于丢弃最后三次提交,请参见下面Lunaryorn的回答。


如何在不创建新分支的情况下将当前分支HEAD移动到指定的提交,请参阅下面Arpiagar的回答。

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

git checkout -b newbranch 6e559cb95

上面所有的命令都创建了一个新的分支,并且最新的提交是命令中指定的,但是为了防止你想让你当前的分支HEAD移动到指定的提交,下面是命令:

 git checkout <commit_hash>

它分离并将HEAD指向指定的提交,当用户只想查看特定提交前的分支状态时,它就不必创建新的分支了。


然后你可能想要回到最近的提交并修复分离的HEAD:

修复Git分离的头?