CentOS 7下执行git stash后,如何恢复被删除的未跟踪文件?
恢复未跟踪的被删除文件
首先明确:git stash 默认仅保存已跟踪文件和已暂存的修改,未执行过 git add 的未跟踪文件不会被存入 stash,这就是你用 git rev-list -g stash | xargs -n1 git ls-tree -r | sort -u | grep conf 找不到目标文件的原因。
要恢复这类未跟踪文件,只能通过系统级文件恢复工具尝试,以下是具体方案:
方法:使用extundelete恢复文件
CentOS 7 常用 ext4 文件系统,extundelete 是适配该文件系统的恢复工具,操作步骤如下:
- 立即停止对仓库所在磁盘分区的写入操作(避免新数据覆盖被删除文件的磁盘空间),若条件允许,先卸载分区:
sudo umount /path/to/your/git/repo - 安装 extundelete(若 yum 源无该包,需自行编译安装):
sudo yum install extundelete - 通过
df -h命令确认仓库所在的磁盘设备名(例如/dev/sda1):df -h /path/to/your/git/repo - 恢复整个仓库目录下的文件:
或恢复指定文件(替换为你的目标文件路径):sudo extundelete /dev/sdX --restore-directory /path/to/your/git/reposudo extundelete /dev/sdX --restore-file /path/to/your/git/repo/target-file.conf - 恢复完成后,文件会被存放在当前目录的
RECOVERED_FILES文件夹中。
注意事项
- 恢复成功率取决于被删除文件的磁盘空间是否被新数据覆盖,操作越及时,成功率越高。
- 若仓库所在分区无法卸载(如系统分区),请尽量避免执行任何写入磁盘的操作(如安装软件、创建文件等)。
内容的提问来源于stack exchange,提问作者Marina Panova
相关产品推荐
相关产品推荐

