如何使用Glob丢弃多个文件的Git未暂存变更?
嘿,这个问题我太熟了!要在Git里用Glob模式批量丢弃未暂存变更,其实用新版推荐的git restore(Git 2.23及以上版本支持)或者传统的git checkout --都能轻松搞定,下面分几种常见场景给你拆解:
一、丢弃指定文件夹内所有未暂存变更
如果你想丢弃folder1文件夹里所有文件的未暂存变更,直接用下面的命令就行:
git restore folder1/
要是你用的是比较旧的Git版本(低于2.23),可以用传统写法:
git checkout -- folder1/
👉 注意末尾的斜杠/很关键,它能明确告诉Git你要操作的是文件夹,避免和同名文件混淆。
二、匹配文件名规则(比如
filename*)丢弃变更 如果要批量处理符合命名规则的文件(比如所有以filename开头的文件),一定要记得用单引号把Glob模式包起来,防止shell提前解析通配符:
git restore 'filename*'
旧版Git对应的命令是:
git checkout -- 'filename*'
👉 为什么要加单引号?举个例子:如果当前目录有filename1.txt和子目录里的filename2.md,不加单引号的话,shell只会把当前目录的filename1.txt传给Git,而单引号能让Git自己处理Glob模式,递归匹配所有符合规则的文件。
三、更灵活的Glob模式示例
除了上面的场景,你还可以用更复杂的Glob规则实现精准匹配:
- 丢弃所有
.js后缀的文件:git restore '*.js' - 丢弃
subfolder目录下所有.md文件:git restore 'subfolder/*.md' - 递归匹配所有子目录里的
.log文件:git restore '**/*.log'(**表示任意层级的子目录)
重要提醒
- 这些命令只对未暂存的变更有效,如果文件已经被
git add到暂存区,得先执行git reset HEAD <文件/路径>把变更移出暂存区,再用上面的命令丢弃。 - 不确定命令会影响哪些文件?可以加
--dry-run参数预览效果,比如:
这个命令只会列出要处理的文件,不会真的丢弃变更,放心试!git restore --dry-run 'filename*'
内容的提问来源于stack exchange,提问作者Avery235
相关产品推荐
相关产品推荐

