Git:如何创建无需提交的可恢复文件快照?Git stash不适用
Git轻量状态快照方案(无需分支/提交)
以下几种方案可以实现类似本地文件备份的轻量Git状态快照,完全满足你的需求:
方案一:git stash create + git stash store(推荐)
这个组合能创建不影响当前工作区的stash快照,完美解决普通stash的两个问题:
保存快照
# 创建一个stash对象(仅保存状态,不修改工作区),返回其哈希值 STASH_HASH=$(git stash create) # 可选:给快照添加备注,方便后续通过`git stash list`查看识别 git stash store -m "backup before big tests" $STASH_HASH
执行后工作区文件完全保持原样,不会像git stash push那样重置文件。
恢复快照
# 从最近的stash快照恢复指定文件,强制覆盖当前版本 git restore --source=stash@{0} myfile # 若记得快照哈希值,也可直接用哈希值恢复 git restore --source=$STASH_HASH myfile
该操作会直接将文件替换为快照状态,不会触发合并操作。
方案二:git archive 导出文件快照
这个方式更接近你手动cp的逻辑,直接生成文件的备份归档:
保存快照
# 导出当前工作区中`myfile`的状态到备份文件 git archive -o myfile-backup-before-big-tests HEAD:./ myfile
恢复快照
# 从归档文件中提取并覆盖当前的`myfile` git archive --extract --file=myfile-backup-before-big-tests myfile
方案三:直接本地备份(兼容Git)
若更习惯手动备份逻辑,可直接复制文件,针对Git追踪的文件,建议结合git ls-files确保备份的是Git管理的版本:
# 保存快照 cp $(git ls-files myfile) myfile-backup-before-big-tests # 恢复快照 cp myfile-backup-before-big-tests $(git ls-files myfile)
内容的提问来源于stack exchange,提问作者tobiasBora
相关产品推荐
相关产品推荐

