如何在git中回滚到特定的提交?

有人能给我的最好答案是使用git恢复X次,直到我达到所需的提交。

假设我想要恢复到20次提交前的提交,我需要运行20次。

有更简单的方法吗?

我不能使用重置,因为这个存储库是公共的。


当前回答

第一步:获取提交列表:

git log

你会得到如下所示的列表:

[Comp:Folder User$ git log
commit 54b11d42e12dc6e9f070a8b5095a4492216d5320
Author: author <author@gmail.com>
Date:   Fri Jul 8 23:42:22 2016 +0300

This is last commit message

commit fd6cb176297acca4dbc69d15d6b7f78a2463482f
Author: author <author@gmail.com>
Date:   Fri Jun 24 20:20:24 2016 +0300

This is previous commit message

commit ab0de062136da650ffc27cfb57febac8efb84b8d
Author: author <author@gmail.com>
Date:   Thu Jun 23 00:41:55 2016 +0300

This is previous previous commit message
...

步骤2:复制所需的提交散列并粘贴以供检查:

git checkout fd6cb176297acca4dbc69d15d6b7f78a2463482f

这是所有。

其他回答

好吧,我想问题是,你说的“回滚”是什么意思?如果你不能重置因为它是公共的,你想保持提交历史完整,你的意思是你只是想让你的工作副本反映一个特定的提交吗?使用git签出和提交散列。

编辑:正如评论中指出的,使用git签出而不指定分支将使您处于“无分支”状态。使用git checkout <commit> -b <branchname>签入分支,或者git checkout <commit>。签入当前分支。

我不确定发生了什么变化,但如果没有分离选项,我无法签出特定的提交。对我有效的完整命令是: Git签出-detach[提交散列]

要从分离状态返回,我必须签出我的本地分支:git checkout master

第一步:获取提交列表:

git log

你会得到如下所示的列表:

[Comp:Folder User$ git log
commit 54b11d42e12dc6e9f070a8b5095a4492216d5320
Author: author <author@gmail.com>
Date:   Fri Jul 8 23:42:22 2016 +0300

This is last commit message

commit fd6cb176297acca4dbc69d15d6b7f78a2463482f
Author: author <author@gmail.com>
Date:   Fri Jun 24 20:20:24 2016 +0300

This is previous commit message

commit ab0de062136da650ffc27cfb57febac8efb84b8d
Author: author <author@gmail.com>
Date:   Thu Jun 23 00:41:55 2016 +0300

This is previous previous commit message
...

步骤2:复制所需的提交散列并粘贴以供检查:

git checkout fd6cb176297acca4dbc69d15d6b7f78a2463482f

这是所有。

试试这个:

git checkout [revision] .

其中[revision]是提交散列(例如:123456789012345678901234567890123456789012345678ab)。

别忘了。最后,非常重要。这将对整个树应用更改。你应该在git项目的根目录下执行这个命令。如果您在任何子目录中,则此命令只更改当前目录中的文件。然后承诺,你应该是好的。

你可以通过

git reset --hard 

这将从工作目录和暂存区域删除所有修改。

git read-tree -um @ $commit_to_revert_to

我会做的。它是“git checkout”,但没有更新HEAD。

你可以达到同样的效果

git checkout $commit_to_revert_to
git reset --soft @{1}

如果您喜欢将方便的命令串在一起。

这将使你的工作树和索引处于所需的状态,你可以git提交完成。