通过先前删除该文件的提交再次删除该文件

Delete again a file via a previous commit that deleted that file in the first place

场景:

我想通过 运行 以下签出命令调用 commitA 再次 删除文件:

git checkout commitA --file.txt

但我明白了

error: pathspec 'file.txt' did not match any file(s) known to git

有没有办法重新删除文件?我可以只删除文件添加它并提交,但我想知道我是否可以通过重用 旧提交 ?!

来保持历史记录干净

编辑:我从文件路径中删除了 Source 以避免混淆

因为你的命令有误 它应该像这样 git restore --Source HEAD~1 file.txt 注意你的 HEAD 将被分离

如果您要更正的是 on-stage,请使用此 git restore --staged file.txt 取消暂存。

I want to [use git checkout to] delete the file again by invoking [the commit in which I deleted it] ...

你不能那样做。这种形式的 git checkout(或 git restore 就此而言)只能 添加或替换 文件,不能 删除 它.

如果您知道该文件在某个特定的提交中被删除并想再次删除它,请使用 git rm(或者 git rm --cached 如果这个想法包括避免修改工作树)。

如果您不知道该文件是否存在,只是想将其恢复到原来的状态,即恢复到原来的状态如果它存在,或者完全删除它如果它不存在,你将需要一个if/then测试:“Did file F exist在 commit C? 如果是,使用 git checkout / git restore;如果否,使用 git rm”。要测试它是否存在,请考虑使用 git ls-tree(如果你想检查多条路径有用)或 git rev-parse(如果你想检查单个路径有用)。您甚至可以使用 git checkout 中的错误作为文件不存在的指示符,尽管这看起来有点笨拙,也许 error-prone.