如何回滚到git中的特定提交?
有人能给我的最好答案是使用git revert X次,直到我达到所需的提交。
git revert
所以假设我想恢复到20个提交的旧提交,我必须运行它20次。
有没有更简单的方法来做到这一点?
我不能使用重置,因为此存储库是公共的。
好吧,我想问题是,你说的回滚是什么意思?如果你不能reset,因为它是公共的,你想保持提交历史完整,你的意思是你只是希望你的工作副本反映特定的提交?使用git checkout和提交哈希。
reset
git checkout
编辑:正如评论中指出的,使用git checkout而不指定分支将使您处于“无分支”状态。使用git checkout <commit> -b <branchname>签出到分支,或使用git checkout <commit> .签出到当前分支。
git checkout <commit> -b <branchname>
git checkout <commit> .
试试这个:
git checkout [revision] .
其中[revision]是提交哈希(例如:12345678901234567890123456789012345678ab)。
[revision]
12345678901234567890123456789012345678ab
不要忘记最后的.,非常重要。这将应用于整个树的更改。您应该在git项目根目录中执行此命令。如果您在任何子目录中,则此命令仅更改当前目录中的文件。然后提交,你应该很好。
.
你可以通过
git reset --hard
这将删除工作目录和暂存区域中的所有修改。
要回滚到特定的提交:
git reset --hard commit_sha
回滚10个提交:
git reset --hard HEAD~10
如果您不想重写历史记录,您可以使用以下文章中的“git恢复”
如何将Git存储库恢复到以前的提交?
原始海报指出:
有人能给我的最好答案是使用git revert X次,直到我达到预期的提交。 所以假设我想恢复到20个提交的提交,我有运行它20次。 有没有更简单的方法来做到这一点? 我不能使用重置,因为这个回购是公共的。
有人能给我的最好答案是使用git revert X次,直到我达到预期的提交。
所以假设我想恢复到20个提交的提交,我有运行它20次。
我不能使用重置,因为这个回购是公共的。
没有必要使用git revert X次。git revert可以接受一个提交范围作为参数,所以你只需要使用一次来恢复一个范围例如,如果您想恢复最后20次提交:
git revert --no-edit HEAD~20..
提交范围HEAD~20..是HEAD~20..HEAD的缩写,表示“从HEAD提交的20th父级开始,并将其后的所有提交恢复到HEAD”。
HEAD~20..
HEAD~20..HEAD
这将恢复最后20次提交,假设这些都没有合并如果有合并提交,那么你不能在一个命令中全部恢复它们,你需要使用
git revert -m 1 <merge-commit>
另请注意,我已经使用git版本1.9.0使用#0的范围进行了测试。如果您使用的是旧版本的git,使用git revert的范围可能会或可能不会工作。
在这种情况下,git revert优于git checkout。
注意,不像这个答案说使用#0,git revert将实际删除您正在提交的任何提交中添加的任何文件恢复,这使得这是恢复一系列修订的正确方法。
git read-tree -um @ $commit_to_revert_to
会做的。它是“git签出”,但没有更新HEAD。
你可以达到同样的效果
git checkout $commit_to_revert_togit reset --soft @{1}
如果您更喜欢将便利命令串在一起。
这些让您的工作树和索引处于所需的状态,您只需git commit即可完成。
git commit
步骤1:获取提交列表:
git log
您将获得如下示例中的列表:
[Comp:Folder User$ git logcommit 54b11d42e12dc6e9f070a8b5095a4492216d5320Author: author <author@gmail.com>Date: Fri Jul 8 23:42:22 2016 +0300 This is last commit message commit fd6cb176297acca4dbc69d15d6b7f78a2463482fAuthor: author <author@gmail.com>Date: Fri Jun 24 20:20:24 2016 +0300 This is previous commit message commit ab0de062136da650ffc27cfb57febac8efb84b8dAuthor: author <author@gmail.com>Date: Thu Jun 23 00:41:55 2016 +0300 This is previous previous commit message...
步骤2:复制所需的提交哈希并粘贴它以进行结帐:
git checkout fd6cb176297acca4dbc69d15d6b7f78a2463482f
仅此而已。
我不确定发生了什么变化,但如果没有选项--detach,我无法签出特定的提交。对我有效的完整命令是:git checkout --detach [commit hash]
--detach
git checkout --detach [commit hash]
要从分离状态返回,我必须检查我的本地分支:git checkout master
git checkout master
假设你在一个项目上工作了一天左右。你注意到一个功能仍然给你错误。但是你不知道你做了什么更改导致了错误。所以你必须搜索以前的工作提交。要恢复到特定的提交:
git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 .
好的,所以提交对你有效。没有更多的错误。你确定了问题。现在你可以回到最新的提交:
git checkout 792d9294f652d753514dc2033a04d742decb82a5 .
并在导致错误之前签出特定文件(在我的情况下,我使用示例Gemfile.lock):
git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 -- /projects/myproject/Gemfile.lock
这是处理在提交中创建的错误的一种方法,直到以后才意识到错误。
这里有一个这样做的例子
cd /yourprojects/project-acme git checkout efc11170c78 .
如果您希望使用DETACHED HEAD回滚X次到某个提交(这意味着您不能搞砸任何事情),那么请务必使用以下方法:
(将X替换为您希望返回的提交数量)
git checkout HEAD~X
也就是说,返回一个提交:
git checkout HEAD~1
您可以在GitHub/BitBucket/Gitlab的提交部分找到与每个提交相关的提交ID。这很简单,假设你的提交ID是5889575,那么如果你想在代码中返回这部分,那么你只需要键入
git checkout 5889575 .
这将带您到代码中的那个时间点。
在git中回滚特定提交:
ac2ec...
git checkout ac2ece0219689ed86b08c93dfebb0d02c0f1d5b1
git branch get_back_to_past
git checkout get_back_to_past
现在该分支有过去的提交项目。您可以将其合并到主服务器,例如,如果您愿意。
有关git head的更多信息,并回滚到旧版本:点击这里