Dav*_*vid 758 git git-revert git-checkout
我怎样才能回滚到git中的特定提交?
有人可以给我的最佳答案是使用git revert
X次,直到达到所需的提交.
所以,假设我想恢复到20次提交的提交,我必须运行20次.
有更简单的方法吗?
我无法使用重置,因为此存储库是公共的.
Ale*_*ner 1139
试试这个:
git checkout [revision] .
Run Code Online (Sandbox Code Playgroud)
[revision]
提交哈希在哪里(例如:) 12345678901234567890123456789012345678ab
.
不要忘记.
最后,非常重要.这将对整个树应用更改.您应该在git项目根目录中执行此命令.如果您位于任何子目录中,则此命令仅更改当前目录中的文件.然后承诺,你应该是好的.
你可以撤消这个
git reset --hard
Run Code Online (Sandbox Code Playgroud)
这将删除工作目录和暂存区域中的所有修改.
Nag*_*ran 191
要回滚到特定提交:
git reset --hard commit_sha
Run Code Online (Sandbox Code Playgroud)
要回滚10次提交:
git reset --hard HEAD~10
Run Code Online (Sandbox Code Playgroud)
如果您不想重写历史记录,可以使用以下帖子中的"git revert"
Ben*_*Ben 87
好吧,我想问题是,'回滚'是什么意思?如果您不能,reset
因为它是公开的并且您希望保持提交历史记录完整,那么您是否只是希望您的工作副本反映特定的提交?使用git checkout
和提交哈希.
编辑:正如评论中指出的那样,使用git checkout
而不指定分支将使您处于"无分支"状态.使用git checkout <commit> -b <branchname>
签入一个分支,或git checkout <commit> .
签进当前的分支.
小智 40
原始海报说明:
有人可以给我的最佳答案是使用
git revert
X次,直到达到所需的提交.所以,假设我想恢复到20次提交的提交,我必须运行20次.
有更简单的方法吗?
我不能使用重置因为这个回购是公开的.
没有必要使用git revert
X次.git revert
可以接受提交范围作为参数,因此您只需要使用一次来还原一系列提交.例如,如果要还原最近20次提交:
git revert --no-edit HEAD~20..
Run Code Online (Sandbox Code Playgroud)
提交范围HEAD~20..
是简短的HEAD~20..HEAD
,并且意味着"从HEAD提交的第 20 个父级开始,并将其后的所有提交还原为HEAD".
这将恢复最后20次提交,假设这些都不是合并提交.如果存在合并提交,则无法在一个命令中将它们全部还原,您需要单独还原它们
git revert -m 1 <merge-commit>
Run Code Online (Sandbox Code Playgroud)
另请注意,我已经git revert
使用git版本1.9.0 测试了一个范围.如果您使用的是较旧版本的git,则使用范围git revert
可能有效,也可能无效.
在这种情况下,git revert
优先于git checkout
.
请注意,与此使用的答案git checkout
不同,git revert
实际上会删除在您要还原的任何提交中添加的任何文件,这使得这是恢复一系列修订的正确方法.
Igo*_*gor 27
第1步:获取提交列表:
git log
Run Code Online (Sandbox Code Playgroud)
您将获得此示例中的列表:
[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
...
Run Code Online (Sandbox Code Playgroud)
第2步:复制所需的提交哈希并将其粘贴以用于结帐:
git checkout fd6cb176297acca4dbc69d15d6b7f78a2463482f
Run Code Online (Sandbox Code Playgroud)
就这样.
Kar*_*son 11
如果您希望使用 DETACHED HEAD 将 X 时间回滚到某个提交(意味着您不能搞砸任何事情),那么无论如何,请使用以下内容:
(将 X 替换为您希望返回的提交次数)
git checkout HEAD~X
Run Code Online (Sandbox Code Playgroud)
IE 返回一次提交:
git checkout HEAD~1
Run Code Online (Sandbox Code Playgroud)
jth*_*ill 10
git read-tree -um @ $commit_to_revert_to
Run Code Online (Sandbox Code Playgroud)
会做的.它是"git checkout"但没有更新HEAD.
你可以达到同样的效果
git checkout $commit_to_revert_to
git reset --soft @{1}
Run Code Online (Sandbox Code Playgroud)
如果你喜欢将便捷命令串在一起.
这些将使您的工作树和索引处于所需状态,您只需git commit
完成即可.