我需要提交并推送我的代码。但在git扩展中,在尝试推送代码时,我收到了一个错误,我不小心点击了一个按钮,我的代码消失了。我去了git extension log 并检查执行的命令。 结帐-B“mybranch”已执行。现在我的整个代码都消失了。如何取回它?
答案 0 :(得分:1)
注意:建议@MarcinOrlowski,首先进行包含.git
文件夹的备份。
由于您的评论中不仅有一个文件,git checkout HEAD /your/file/path
无效。但是,您可以尝试
git checkout -
如果不起作用,请尝试
git reset --hard HEAD
答案 1 :(得分:1)
好的,第一步是放松一下:只要你 运行Item
,你的代码就不会消失!
git commit
对 创建或重新设置 给定 branchname 的作用。鉴于你提到的其他内容,我相信你实际上运行了git checkout -B branchname
,其中(由于多种相互交织的原因)最终会产生git checkout -B UIUpdates origin/UIUpdates
的效果。
根据您的reflog中的内容(在编辑中):
git reset --hard UIUpdates
看起来好像你自己的提交可以从井号ec1226b HEAD@{0}: checkout: moving from UIUpdates to UIUpdates
...
ec1226b HEAD@{5}: branch: Reset to origin/UIUpdates
5fc98bc HEAD@{6}: commit: issues and questions templates.
ec1226b HEAD@{7}: checkout: moving from UIUpdates to UIUpdates
ec1226b HEAD@{8}: branch: Reset to origin/UIUpdates
9a4c4ef HEAD@{9}: checkout: moving from UIUpdates to UIUpdates
...
到达。你可以运行:
5fc98bc
验证。如果这看起来不错,您应该将 new 名称附加到此提交中,以便您更轻松地引用它 - 并确保它保持的时间超过您从错误中恢复的默认30天
我们说这是正确的(这是我在整个git log 5fc98bc
输出图片和中看到的唯一commit
行,git reflog
,紧接着是由HEAD@{6}
编写的HEAD@{5}
行,您当前没有名为git checkout -B
的分支,因此该名称可用。然后你可以运行:
saveme
将名称git branch saveme 5fc98bc
附加到其中。现在saveme
将显示提交,git log saveme
将使您进入包含这些提交的分支。
理解所有这一切的关键是要知道在Git中,分支名称只是Git进入提交图的方式。名称只记录哈希ID(那些难以理解的字符串,如git checkout saveme
)。这些ID实际上很重要;我们人类只需要名称。
提交图表示每次提交到存储库的提交,Git通常做的是添加新提交。即使您使用明显具有破坏性的命令(例如5fc98bc
)也是如此。提交本身不被破坏,它们变得更难找到。但分支名称也保护提交;最终,如果他们“太难找到”,Git会垃圾收集他们并将它们扔出去。具有标识提交的分支(或标记)名称保护从此Grim Reaper 收集器提交,并且还保护可从到达的所有提交提交。
http://think-like-a-git.net/对此进行了详细介绍,因此您可能需要花一些时间阅读这些页面。