在git中检索丢失的代码

时间:2015-12-30 09:50:01

标签: git version-control

我创建并结帐了一个分支" 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

我希望我可以从这里检索丢失的代码。任何帮助将不胜感激。

2 个答案:

答案 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具有"本地更改"的概念)来检索丢失的更改。