How do you roll back (reset) a Git repository to a particular commit?
我克隆了一个Git存储库,然后在开发过程的早期尝试将其回滚到特定的提交。在那之后添加到存储库中的所有内容对我来说都不重要,所以我想忽略本地源代码中所有随后的更改。
但是,当我尝试在GUI工具中回滚时,它不会更新我的本地文件系统-我最终总是得到项目的最新源代码。
在项目的历史记录中,从特定提交中获取存储库的源代码并忽略所有后续更新的正确方法是什么?
- git reset—硬AABB3434/git push origin branch—力
1
| git reset --hard <tag/branch/commit id> |
注:
- @mariusznowak在执行git reset之后--hard,(2 back)在执行"git push-f origin master"i get"remote:error:denying non-fast-forward refs/heads/master(you should pull first)"时,这是我的报告,我想收回它:)
- @皮特在你的git push命令结束时尝试--force。
- 确保您也指定了分支名称。
- 在服务器端,如果允许使用--force进行非快速前推,则存储库有一个配置选项。在存储库中,mangit config和check.git/config for denynonfastforwards=true。
- 这实际上不起作用:fatal: Cannot do hard reset with paths.。
- 我的第二个选择没有运行:我必须执行git push -f master来恢复远程存储库。但是,请注意,使用-f开关,恢复提交后的提交在远程回购上也会丢失!(这是我想要的,但其他人可能希望保留历史)。
- 嘿@kauppi你能在你的答案中加入branchname到git push命令中吗?
- 如果您正在执行"git reset--hard c9kid83",并希望将更改推送到相同的分支运行"git push-f",那么它也将保留您的历史记录。
- 答案是这样的:有人知道:git reset head~2和git reset head~2是否不同——难?
- git reset--hard对我很有用
- 你说"如果你想承诺你需要的状态…push"—我只有一个本地存储库,所以push不是一个选项。那该怎么办?
- 这种方法对我不起作用。远程:错误:拒绝非快进引用/头/主控形状(应先拉)
- 不使用--force也可以吗?你并不总是有可能改写历史。
更新:
因为改变了跟踪分支是如何创建的,所以我没有再建议重命名分支。This is what I recommend now:
在当前状态下复制分支机构:
ZZU1
指挥官会把你留在你的电流支架上
复制这个网站码到您的网站上以设置一个投票箱在您的网站上。
1
| git reset --hard c2e7af2b51 |
用你想回去的样子
当你决定你的疯狂实验分支不包含任何有用的东西时
1
| git branch -D crazyexperiment |
当你开始与历史调节GIT命令(Reset,Rebase)在你离开他们之前创建后排分支时,总是很好的。也许有一天你会感到舒服但你不需要如果你以你不想要的方式改变你的故事,并没有创建一个后台,你可以看看git reflog。即使没有树枝或标记指向他们,也要保持周围的距离。
原始答案:
方法是创建一个新的分支机构。让我们假设你在masterBranch和你想回到c2e7af2b51
重命名你的现任主计长
1
| git branch -m crazyexperiment |
检查你的好消息
在这里做你的新主人
现在,如果你想看的话,你周围还有你的疯狂实验,但是你的主人公会在你最后一个知道的好点,准备加入。如果你真的想远离你的实验
1
| git branch -D crazyexperiment |
- 谢谢-也许不是海报要求的,但更不用说让我焦虑了。
- 处理远程存储库(如github),您可能需要执行"git push-f origin master",因为要让master看起来像在指定提交时那样,需要执行非fastforwards操作,但此方法比重置要干净得多。
- Git重置——硬的没有那么脏。几乎每一个可用的Git教程都会介绍它,作为撤销自己树中更改的正确方法。如果不在基本特性中,至少在中间特性中。如果你以某种方式进入一个未知的状态/头部,总会有git reflog,它告诉你头部的历史,不管分支是什么。从中选择一个合适的commitid,然后从中分支或者git重置——这很难做到。
- Kauppi-那么你会不会有问题推回到远程回购?
- 当您重新设置为较早的提交时,reflog很好,但无法找到以前的head sha。
- 我坐在我的"如何解决所有问题"椅子上跳舞。
- 还有一件事:如果您的旧主分支(现在重命名为CrazyExperiment)正在跟踪远程分支,那么在该答案中的步骤之后会发生什么情况:CrazyExperiment将跟踪该远程分支,而Master将不跟踪任何内容。您可能需要git branch --set-upstream-to=/ master和git branch --set-upstream-to=/ crazyexperiment来适当地设置这些设置。
- 哦,应该是git branch --set-upstream master /和git branch --set-upstream crazyexperiment /。
- 我遵循了这里的说明,在执行了git branch -D crazyexperiment之后,我永久删除了所有代码。我希望能回到原始状态,即在执行reset之前的状态,发布恢复备份所需的命令将是有帮助的。
- +1对于CrazyExperiment,它工作时不会弄脏其余的提交内容,并且很容易删除Frankenstein分支
对于那些带吉他的人,你也可以用吉他。
右点击你想要回到并选择"复位主分行在这里"。然后从下一个菜单中选择硬的。
- 当服务器(stash)不允许强制推送时,没有工作人员。无法复位。
当你说"GUI工具"时,我假定你是用GIT来窗户的。
重要的是,如果你还没有做好准备,我会建议成立一个新的分支。当你测试出你的变化时,你的主人也能保持原样。
你需要回到原来的样子,就像你在你的视野的右侧有着历史一样。然后你会注意到你有所有不想要的文件,就像左边一样。现在你需要右点击所有未知文件上的灰色标题,选择不同的标题。这将使您的档案返回到这个版本。