我怎么去回滚到一个具体的承诺在git?

最好的答案,有人可能会给我利用 git revert X次直到我到达所期望的承诺。

因此,让我们说,我想恢复到的提交的20犯老,我不得不跑这20倍。

是有一个更简单的方式做到这一点?

我不能使用复,因为这个仓库是公开的。

有帮助吗?

解决方案

尝试这种情况:

git checkout [revision] .

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

在最后不要忘了.,非常重要。这将更改应用到整个树。你应该在Git项目的根执行此命令。如果您有任何子目录,则该命令只改变当前目录下的文件。然后提交,你应该是不错的。

可以通过

撤消此
git reset --hard 

这会从工作目录和分级区域删除的所有修改。

其他提示

要回滚到一个特定的提交:

git reset --hard commit_sha

要回滚10提交回:

git reset --hard HEAD~10

您可以在以下后使用“混帐复归”,如果你不希望改写历史

如何恢复Git仓库到以前提交<? / A>

好了,我想这个问题是,你是什么意思的“回滚”?如果你不能reset因为它是公众和你想保持提交历史完好无损,你的意思是你只是想你的工作拷贝来反映一个特定的承诺?使用git checkout和提交散列。

编辑:有人指出,在评论中,使用git checkout没有指定一个分支会让你在“无分支”状态。使用git checkout <commit> -b <branchname>检出到一个分支,或者git checkout <commit> .检出到当前分支。

<强>步骤1:取提交的列表:

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 read-tree -um @ $commit_to_revert_to

将做到这一点。它的“GIT中结帐”,但不更新HEAD

可以实现具有同样的效果

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

如果你喜欢穿线方便命令一起。

这让你与你的worktree和索引在期望的状态,你可以git commit完成。

我不知道是什么改变了,但我不能签出一个具体承诺,而选择--detach。为我工作的完整命令是: git checkout --detach [commit hash]

要从游离状态,我不得不签出我的本地分行回来:git checkout master

让我们说你在一个项目上,并在一天左右后正常工作。你注意到一个特征仍然会发生错误。但你不知道你做了什么变化导致了错误。所以,你必须以渔以前的工作提交。要恢复一个特定的提交:

git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 .

好了,犯下了你的作品。没有更多的错误。你精确定位的问题。现在,你可以回去最新承诺:

git checkout 792d9294f652d753514dc2033a04d742decb82a5 .

和检出一个特定文件时,它导致了错误(在我的情况下,我使用例如Gemfile.lock的)之前:

git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 -- /projects/myproject/Gemfile.lock

这是处理您提交的创建错误而不自知的错误,直到后来的一种方式。

想HEAD分离模式?

如果您希望回滚X时间到一定与一个分离的头提交(这意味着你可以不会弄乱任何东西),然后通过各种手段,使用下列:

(有多少承诺要回去更换X)

git checkout HEAD~X

即。回去一个承诺:

git checkout HEAD~1

下面是一个例子,做

    cd /yourprojects/project-acme 


    git checkout efc11170c78 .

您可以找到相关的各提交ID在GitHub上/到位桶/ Gitlab的提交部分提交。 它非常简单,假设你提交ID是 5889575 ,然后如果你想回到这个部分在你的代码,那么你只需要输入

git checkout 5889575 .

这将带你到你的代码的时间点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top