我创建并结帐了一个分支" Deep"来自主分公司。此时主分支有一些未提交的更改。在" Deep"我查看最后保存的提交。
之后我结账了#34; Master"科。
使用checkout命令覆盖" Master"上的所有未保存的更改科。
有没有什么方法可以找回" Master"现在拥有上次保存的提交代码的分支。当我在终端中键入reflog命令时,我得到以下信息:
f3df3fe HEAD@{16}: checkout: moving from f3df3fee373a68b65543a952721a75b9765d321a to master
f3df3fe HEAD@{17}: checkout: moving from Deep to f3df3fee373a68b65543a952721a75b9765d321a
f3df3fe HEAD@{18}: checkout: moving from master to Deep
f3df3fe HEAD@{19}: commit: Node touch detection
aa47485 HEAD@{20}: commit: Area Manager Created
这些是我使用的命令:
git checkout -b Deep (Switching from master to Deep branch)
git log (It gave me the list of all previous commits)
git checkout f3df3fee373a68b65543a952721a75b9765d321a (checkout last saved commit)
在此命令之后,我在终端中收到以下消息: "你处于分离的头部'州。你可以环顾四周,做实验 更改并提交它们,您可以放弃您在此中提交的任何提交 通过执行另一个checkout来不影响任何分支的状态。如果要创建新分支以保留您创建的提交,您可以 通过再次使用-b和checkout命令来执行此操作(现在或稍后)。示例:git checkout -b"
然后我列出所有分支并签出主分支
git branch
* (HEAD detached at f3df3fe)
Deep
master"
git checkout -f master
再次在此列出所有分支
git branch (Detached head is gone here which I assume contains the local changes)
Deep
* master
我希望我可以从这里检索丢失的代码。任何帮助将不胜感激。
答案 0 :(得分:1)
您可以尝试搜索悬空斑点。
回到主人并做
$ git fsck --unreachable
这会给你一个悬空blob列表。
unreachable blob 070204aa62dc0ef612f922a02d06d3....
unreachable blob 821c4ca73cb5c99f7fa5f23358e3a9....
unreachable blob b91c74fc1b5c0f8eb8ccfd1a8024c6....
然后做git Show b91c74fc1b5c0f8eb8ccfd1a8024c6 ....
这可以让你看到悬空blob的内容,但不能看到文件的名称。此时,您可以继续调查无法访问的blob引用SHA1中的内容,直到看到丢失的内容为止。
然后将该内容写入文件
git show f0480 > myfile
这会将myfile(.txt文件)放在您当前所在的目录中。然后,您可以复制粘贴内容或转换为正确的MIME类型进行编辑。
希望这有帮助。
答案 1 :(得分:0)
分离的头已经消失在这里我假设包含本地更改
分离的头部不包含本地更改,因为您没有提交它们。
另外,您使用了短语"未保存的更改"在你的问题。这与"未提交的更改具有不同的含义"。未提交的更改是尚未提交给git的更改。未保存的更改是尚未保存到磁盘的更改。您应该熟悉这两个概念之间的区别,以供将来参考。
此外,当您检出最后提交的修订版(您不应该说"上次保存的修订版")时,将git更改为分离的头模式但没有做任何其他操作,因为您已经在该修订版上。很明显,你不了解git是如何工作的,需要熟悉基本的git概念。
在任何情况下,您都可以使用撤消或"本地更改"在您的编辑器/ IDE中(Eclipse具有"本地更改"的概念)来检索丢失的更改。