Git reset --hard not working as expected
我正在尝试检查存储库的历史记录。我停在一个点上,在这个点上我想将存储库返回到一个特定的提交。我搜索过了
我收到消息说head现在是12345。我打开文件夹查看我想查看的文件,但没有更改!
我想回到2009年那个文件第一次创建的时候。但是,该文件是新版本的(在2010年编辑之后)。
我查了工作目录,但没有查到。我也跑了
号
但没有改变。
我不知道现在该怎么办。我想回到过去查看文件的外观,但我想回到整个存储库。
- 欢迎使用堆栈溢出!你不必用你的名字签名,因为它会自动出现在你帖子的右下角。提示:如果您将行缩进4个空格,它们将被标记为代码示例。您还可以突出显示代码并单击"代码"按钮(上面有"")。
- 我有"+1"只因为我喜欢时间旅行。抱歉,主题外:)
公平地说,我不明白在你这样做之后你的回购协议发生了什么。
应该强调的是,您通常应该避免使用"git reset--hard"命令。风险是丢失您所拥有的任何未承诺的更改,并最终导致悬而未决的承诺。如果您想放弃提交12345之后所做的所有提交,那么您真的需要使用这个命令。我邀请你读一下关于Git重置的文章——硬的
在您的例子中,我实际上已经创建了一个临时分支"temp_branch",指向commit 12345。命令是
1
| git checkout -b temp_branch 12345 |
号
这将把回购交易切换到新的分行"临时分行",其负责人将是12345。创建一个新的分支并不是强制性的,但是如果我需要从这个承诺中进行更改,我发现这很方便。
- 我没有做任何更改。我感兴趣的只是调查历史。我真正想要的是在创建提交时从存储库中获取一个副本,并将其保留以供以后分析。所以现在,我需要将存储库恢复到其原始状态,并在那时获取存储库的副本。
- 在这种情况下,"git checkout"是最好的选择。它让你的头向正确的承诺。基本上,如果您执行"git checkout commita",则您的回购将处于commita状态(前提是您没有任何正在进行的工作)。你可以用"git状态"来检查它。然后,如果您执行"git checkout commitb",则repo将处于commitb状态。为了查看你的头部在哪里,你可以做一个"git-log-oneline-graph-deco-all"。如果你想回到你的主人在哪里,你只需要做一个"git结帐主人"。
- 好吧,我可以知道在我做了"Git硬重置"之后,回购协议现在发生了什么吗?现在的情况是我做了"Git重置——硬提交",并提交了一个应该在2008年。但是,我确实通过git日志查看了提交历史记录,并且可以看到从2013年开始的提交。原始回购始于2015年。我想撤消重置操作。
- 我建议您使用"git reflog"命令来确定对您的回购执行了哪些操作。如果最后一个动作(head@0是你的"git reset--hard"),你想要的是回到head@1_。在这种情况下,您需要执行"git reset head@1"。我邀请您阅读stackoverflow.com/questions/5788037/recover-from-git-reset-h‌&8203;ard
如果您只想在提交时查看内容,那么不要使用重置。重置是为了移动树枝,这样你就会陷入麻烦。你看看,git checkout 12345。然后,您可以再次使用checkout返回您所在的位置,git checkout master或任何分支。
至于您的文件没有被更改,您确定它在提交时是不同的吗?与git diff 12345 branch_name -- filename核对。
对我来说,我没有stage文件,这就是git reset --hard不适合我的原因。我刚执行了以下命令
git add . => to stage all files (don't ignore .)
git reset --hard => to reset all changes
号