恢复到git add的最后一次更改

时间:2018-10-30 16:19:05

标签: git

我正在制作git仓库并发出命令

$ git add .

要保存当前修改,

10分钟后,我不小心进行了一些错误的更改,因此我想恢复为最后添加。状态。

我进行了搜索,但发现只有一些方法可以重置为最新提交。

我怎么能回到十分钟前的状态。

1 个答案:

答案 0 :(得分:2)

最简单的答案是:您不能,git只提供返回到以前的 commits 的方式(例如:您使用git commit进行过授权的东西)

以供将来使用:您可以运行git add . && git commit -m WIP来“保存当前修改”


更长的答案是:如果恢复该文件的先前版本比保持心理健康更重要,则可以在悬垂的斑点列表中进行挖掘


嘿,我知道我在某处有某种脚本:

以下脚本将列出尚未打包到对象包中的无法访问的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