我正在制作git仓库并发出命令
$ git add .
要保存当前修改,
10分钟后,我不小心进行了一些错误的更改,因此我想恢复为最后添加。状态。
我进行了搜索,但发现只有一些方法可以重置为最新提交。
我怎么能回到十分钟前的状态。
答案 0 :(得分:2)
最简单的答案是:您不能,git只提供返回到以前的 commits 的方式(例如:您使用git commit
进行过授权的东西)
以供将来使用:您可以运行git add . && git commit -m WIP
来“保存当前修改”
更长的答案是:如果恢复该文件的先前版本比保持心理健康更重要,则可以在悬垂的斑点列表中进行挖掘
以某种方式恶意检查“最近修改了哪些Blob?”请参见this answer
嘿,我知道我在某处有某种脚本:
以下脚本将列出尚未打包到对象包中的无法访问的Blob(对于最近的Blob通常是这种情况),并按创建日期对它们进行排序(实际上:使用文件的创建日期为磁盘来估计Blob的创建时间)
#!/bin/sh
git fsck --no-reflogs --unreachable |\
grep blob |\
cut -d' ' -f3 |\
sed -e 's|^\(..\)\(.*\)|.git/objects/\1/\2|' |\
xargs ls -l -t 2> /dev/null
一些解释:
# git fsck --unreachable , if you also use "--no-reflogs" this will search
# through commits which could be reached by the reflog but not by live branches
git fsck --no-reflogs --unreachable |\
# only keep lines mentioning "blobs" (files)
grep blob |\
# keep the 3rd field of the output (hash of blob)
cut -d' ' -f3 |\
# turn hashes into filenames, e.g :
# aee01f414061ea9b0bdbbc1f66cec0c357f648fe ->
# .git/objects/ae/e01f414061ea9b0bdbbc1f66cec0c357f648fe
# (this will be the path of this single blob)
sed -e 's|^\(..\)\(.*\)|.git/objects/\1/\2|' |\
# give this to ls -lt (list by modification time),
# discard messages saying "file does not exist"
xargs ls -l -t 2> /dev/null