我正在使用源代码树。我创建了一个多个更改的存储,并将其删除。有没有办法找回他们?使用SourceTree在Git中检索已删除的存储
回答
隐藏在内部被保存为一个合并提交,从一个列表中引用。
git fsck
可以找到悬挂的物体。它会发现不仅仅是你删除的隐藏,也可能是其他的东西,所以你会想要寻找提交,看起来他们可能是你的存储(git show <ID>
显示有关对象的相关信息,并决定它是否是一个你正在寻找)。
一旦你有了,你需要做的就是重新插入它的列表中。该列表存储在.git/logs/refs/stash
和行具有以下格式:
<ID of previous stash commit in list or 0000000000000000000000000000000000000000 if none> <ID of merge commit> Your Name <[email protected]> <UNIX timestamp> <time zone, e.g. +0000><TAB char><description of stash>
这里有一个工作示例:
16b9a2d400dafe7ea25592029e3e5582d025c7d8 5def7605dfe625e8b3a3152fe52a87cc36694b6a Jan Krüger <[email protected]> 1374227992 +0200 WIP on master: 0dbd812 Update draft release notes to 1.8.4
就合成了藏匿要行重新插入(名称/邮件/时间戳/描述不要有是准确的),你应该能够正常使用它。
快乐狩猎!
我运行'''git fsck'''命令,它给了我大约100个GUID。有没有更简单的方法来解决这个问题?我的意思是更多的视觉? – Tushar
它不可能通过100 guids!请建议一个更简单的方法。 – Tushar
这是我知道的唯一方法。但是,你可以使用下面的方法减少它:'git fsck --unreachable';并直接得到一个清单的细节,可能是这样的:'for i in $(git fsck --unreachable --no-dangling 2> |/dev/null | grep commit | cut -d''-f3);做git - 无记录器日志-1 $ i;完成|少' –
像以前的答案状态一样,您可以使用git fsck
来列出 未被包含您删除的藏匿物的任何物品引用的物品。但是,它 可以使用git show
筛选对象的该列表仅显示 藏匿处,如:
git fsck 2> /dev/null |
awk '/commit/{print $3}' |
git show --stdin --merges --grep '^WIP on'
如果您知道创建藏匿时,你还可以添加一个参数像 --since '2 days ago'
到最后以进一步限制输出。希望这会将名单减少到可管理的规模。
找到正确的存储后,记下它的提交ID,并且可以使用 git stash apply COMMITID
来应用它,就像它没有被删除一样。
“since”选项对我来说不起作用 – IcedDante
正如JanKrüger所述,git fsck
就是要走的路。但是,如果您发现自己无法(无论出于何种原因)成功合成存储文件中的一行并使存储显示在可用列表中,则可以直接使用git stash apply <guid>
,而不添加该行。这将立即应用(不提交)文件(s)更改到您当前的分支。
基于上述答案,这里是一个简单的序列:
打开一个终端窗口和CD到存储库下的文件夹。然后:
git fsck | awk '{print $3}' > tmp.txt
cat tmp.txt | xargs git show > tmp2.txt
编辑器现在打开tmp2.txt,找到丢失的代码,并找到提交-ID在它的上面。然后应用代码:
git stash apply <commit id>
rm tmp.txt tmp2.txt
这救了我的命!我真的很感谢所有回答这个问题的人。我保佑git的创造者Linus Torvalds保留删除的东西在git数据库。天才!!
我对git相当陌生,这绝对挽救了我的生活,恢复了工作的日子。谢谢 – RyuAkamatsu
我同意。我只是按照这些步骤,并在我无意中删除(弹出)存储后恢复了3天的工作。 – bholben
我见过最好的答案。感谢捆绑! – Andrew
for i in $(git fsck 2>|/dev/null | grep commit | cut -d' ' -f3); do git --no-pager log -1 $i; echo "-------------------------"; done | less
然后找到提交ID#。
,做
git stash apply {commit#}
另一种解决方案是:
git fsck 2>&1 | awk '/dangling commit/{print $3 "^!"}' | xargs git log
您是否使用SourceTree用于查找作者和提交信息(日期,哈希,作者等)
git stash store <hash-id-of-specific-commit>
我试了几个脚本,但这个工作没有错误或给我随机/ n数据。 – Zammbi
- 1. 使用SourceTree删除Git存储库而不删除磁盘上的文件
- 2. 恢复已删除的git存储库
- 3. SourceTree git存储丢失
- 4. 在git中检索已删除的文件
- 5. Git如何检索从本地和远程存储库中删除的已删除文件?
- 6. 从SourceTree或Git恢复已删除的文件
- 7. JGit删除git存储库
- 8. 使用git删除不在本地存储库中的分支
- 9. Git/SourceTree:如何删除分支?
- 10. 用Cloudant检索已删除的文档
- 11. 如何使用SourceTree创建新的git存储库?
- 12. git svn保存已删除的分支
- 13. git - 从存储库中删除文件
- 14. git从存储中删除文件
- 15. 从存储库中删除git corrupt blob
- 16. Git:从存储库中删除凭证
- 17. 意外从Git存储库中删除
- 18. Git从存储库中删除* .sln.docstates
- 19. 如何在git存储库中列出所有已删除的文件?
- 20. 检索已删除的网页
- 21. Drupal - 已删除的块 - 如何检索
- 22. 检索已删除的日历事件?
- 23. 检索已删除的Facebook邮件
- 24. 如何使用Windows Tortoise从Git存储库中删除文件?
- 25. 在GIT中删除“在外部存储库”中的文件
- 26. 是Git中SourceTree
- 27. 已上传的文件存储/检索
- 28. 如何在Git中从远程存储库中删除已删除的文件夹?
- 29. 如何使用c存储和检索和删除documetDB中的列表#
- 30. git checkout已删除文件在Mercurial中?
Windows还是Mac? Mac版本在功能方面一直领先于Windows版本。 – 2014-05-05 04:13:35
可能相关:[在git中恢复丢弃的存储](http://stackoverflow.com/q/89332/456814)。 – 2014-05-05 04:15:27
@Cupcake我一直在使用Mac版本。 – Tushar