使用Git重置所有特定扩展名的文件。

13

我已经修改了许多类型的文件,如.tsx.scss.scss.d.ts,并已提交并推送到我的分支。

有没有办法只重置扩展名为.scss.d.ts的文件与主分支同步?

只保留.tsx.scss的更改,仅将.scss.d.ts与主分支重置。

谢谢


1
可能是如何在git中还原某种类型的未提交更改文件的重复问题。 - Chris Maes
2个回答

18

你可以先输出具有以下路径的列表:

git ls-files master -- *.scss.d.ts

然后将该列表发送到checkout命令*,以将它们恢复为在master上的状态。

git checkout master -- $(git ls-files master -- *.scss.d.ts)

* 请注意,自从最近的git版本以来,您还可以使用git restore达到相同的效果。

git restore --source=master '*.scss.d.ts'

git checkout master -- $(git ls-files -- *.scss.d.ts) 给出以下错误 error: pathspec 'pathtofile.scss.d.ts' 未匹配到任何已知的 git 文件。 - ankitd
啊哦...抱歉,当我重新格式化我的答案时,我犯了一个愚蠢的复制粘贴错误,但是当然在调用ls-files时也必须引用master(git checkout master -- $(git ls-files master -- *.scss.d.ts)),我已经编辑过了。 - Romain Valeri
@ankitd 我这里的环境一样,我在一个仓库上尝试了一下,它可以工作。我想知道在你的情况下可能有什么不同... - Romain Valeri
虽然这个方法可以运行,但它过于复杂,也不是大多数人想要的。很抱歉,还有更好的方法来完成这个任务。 - MTS
FYI,“checkout branch --”版本执行硬重置,而“restore”仅执行软重置。 - Basti
显示剩余5条评论

13
git reset master -- "*.scss.d.ts"

这是正确的答案。 - MTS
git version 2.32.0 (Apple Git-132) 中,只需使用 git reset "*.scss.d.ts" 即可。 - MTS
@MTS 不好意思,这是一个误解。OP想要摆脱更改,而不是保留和取消暂存它们。这个命令不能实现目标,它只会取消暂存特定扩展名的文件。请查看我的解决方案,可能稍微复杂一些,但是可以实现目标。 - Romain Valeri
@RomainValeri,OP在哪里说“rid”了?我只看到“reset”。 - JBallin
@MTS 会重置到 HEAD,这可能与主分支 master 不同(这是 OP 请求的内容)。 - JBallin
首先,它听起来更像是“重置”的口语用法,而不是特定的git含义,但是随后提到“保留更改...”让我确信这显然不是OP所理解的“重置为未暂存”。我想我们需要他们在这里澄清一下。 - Romain Valeri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接