我第一次使用git, 我有一个目录,里面写着几个程序,并执行了以下步骤
git add .
git commit
,然后我收到了一条消息Aborting commit due to empty commit message.
git rm -r -f
ls
时,我丢失了所有代码。有什么方法可以让他们回来,我的愚蠢甚至没有备份副本。我到目前为止所遵循的事情
我用Google搜索了一些发现的命令,但是他们没有工作
git stash
如果我输入此命令,我会
致命:糟糕的修改'HEAD' 致命:糟糕的修改'HEAD' 致命:需要一次修订 您还没有初始提交
git reset HEAD
,如果我输入此命令,我会
致命:模棱两可的争论'HEAD':未知版本或路径不在 工作树。 使用' - '将路径与修订分开
我真的需要恢复这些文件!
我创建GIT的步骤
mkdir BareRepo
BareRepo
目录中我做了git init
,git status
,git config --bool core.bare true
git clone BareRepo/ Programs/
Programs
目录中,我做了上述所有事情答案 0 :(得分:6)
基于对@ the-malkolm的观察。
根据问题中的信息,没有提交,并且不会随时跟踪文件。因为这样的git并不真正知道任何已被删除的文件。
然而,那说,有希望。只是因为你试图在删除它们之前提交文件,所以有一个幻像提交在其中包含所有文件。以下是一个例子:
$ git init
Initialised empty Git repository in /tmp/so/.git/
$ echo "find this text" > README.md
$ git add README.md
$ git commit -v
Aborting commit due to empty commit message.
$ git rm -rf .
rm 'README.md'
$ git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
以上模拟了问题中的事件,通常这是重新开始重写代码的时间。没有提交,文件消失了。
但是,检查.git
存储库会产生一些信息:
$ tree .git/objects/
.git/objects/
├── 91
│ └── 9cdf847a6af7c655c8de1d101385f47f33e0f9
├── d6
│ └── 7d51abe2521dcd00cec138b72f5605125c1e41
├── info
└── pack
尽管没有提交,但git存储库中有对象。有必要确定两个对象中的哪一个是tree:
$ git ls-tree 919cdf
fatal: not a tree object
$ git ls-tree d67d51
100644 blob 919cdf847a6af7c655c8de1d101385f47f33e0f9 README.md
$
第一个引用是表示README.md文件的blob - 存储库中每个文件将有一个blob,本例中的第二个是树引用。
识别出树形哈希后,可以使用read-tree重建索引:
$ git read-tree d67d51abe2521dcd00cec138b72f5605125c1e41
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: README.md
#
# Changes not staged for commit:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: README.md
$
此时,工作副本为空,但丢失的文件将暂停提交。
提交他们:
$ git commit -m "phew"
结帐以匹配存储库的已提交状态:
$ git checkout .
$ ls
README.md
然后,所有文件都存在且已经提交。
答案 1 :(得分:-4)
我不确定这会100%有效,但我认为值得一试:
git reflog
是你的命令
reflog记录你在git中执行的每一个动作......所以我打赌这个。
reflog将生成您在repo上执行的命令列表
要恢复您的工作,请浏览reflog生成的日志并执行操作
git reset --hard HEAD@{<x>}
..用x
替换定义你想要的状态的数字......
....应该将你的回购重置回原状态(希望如此)