我正在学习git,通常我对VCS有点怀疑,因为我很难习惯它们。
我删除了一个名为“experimental”的分支,其中包含一些tmp文件,我看到我的工作目录中删除了这些文件,所以我摸不着头脑,想知道这是否正常,我是否可以把它带回去,以防我再次需要它等等
我发现SHA提交了tmp文件并使用提供的sha重新创建了分支,并再次查看了所有文件及其当前内容。
我提交后,我在工作目录中所做的一切都可以恢复吗?
对许多人来说,这似乎是一个愚蠢的问题,但它有点引起我的兴趣,所以我想了解极限
答案 0 :(得分:7)
如果您已对文件提交了相应的更改,则几乎所有操作都可以撤消。即使您强制删除分支或执行硬重置,也可以使用git reflog
或git fsck
找到松散的提交对象。
然而,git gc
偶尔会清除松散的物体,因此一段时间后无法恢复它们。
答案 1 :(得分:2)
我在工作中所做的一切 我可以恢复目录 提交吗?
是的,你可以。例如,尝试git reflog
。这将为您提供一份提交列表
在当前的分支机构。选择一个sha1 sum,然后键入git checkout 45db2a...
。检查该提交。如果您想进行更改,请务必从git checkout HEAD
或git checkout -b newbranch
开始。
您还可以使用git在当前HEAD
之上挑选这些提交(即如果它们在不同的分支中完成,则可以将它们拉入)。 This问题比我能更好地讨论它。
答案 2 :(得分:2)
任何严肃的VCS的要点是以永久和不可变的方式保持项目的整个历史。因此,您可以随时对您的工作进行任意修改。
git在存储方面有一种特殊的行为,因为它可以在没有引用的情况下删除对象。参考文献是:
这意味着保留了作为分支一部分的所有提交,以及标记的每个对象(=主要是提交)。每个分支上还有一个所谓的reflog(除非取消激活),其中git保留对你在前几天创建的所有对象的引用。当任何分支,标记或reflog都没有引用某个对象时,git gc会将其从数据库中删除。这是典型的情况,当你创建一个黑客分支,在那里提交了一些东西,并删除了这个分支而没有将它合并到另一个分支。
答案 3 :(得分:1)
git reset --hard
可以不可逆转地删除更改