场景:
- 删除file.txt文件,commitA并推送
- 通过git checkout commitA~1 file.txt、commitB和push恢复file.txt
我想通过运行以下checkout命令调用commitA再次删除文件:
git checkout commitA --file.txt
但我有
error: pathspec 'file.txt' did not match any file(s) known to git
有没有办法重新删除文件?我可以删除文件,添加并提交,但我想知道是否可以通过重用旧的提交来保持历史记录的干净?!
编辑:我从文件路径中删除了Source以避免混淆
我想通过调用[我删除文件的提交]来[使用
git checkout
]再次删除文件。。。
你不能那样做。这种形式的git checkout
(或git restore
)只能添加或替换文件,而不能删除。
如果您知道在某个特定的提交中删除了该文件,并希望再次删除它,请使用git rm
(如果这个想法包括避免修改工作树,则使用git rm --cached
)。
如果你不知道文件是否存在,只是想把它放回原来的状态——也就是说,如果它存在,就把它恢复到的状态,或者如果它不存在就把它完全删除,你将需要一个if/then
测试:"文件F是否存在于提交C中如果是,请使用git checkout
/git restore
;如果否,则使用git rm
";。要测试它是否存在,请考虑使用git ls-tree
(如果要检查多个路径,则很有用)或git rev-parse
(如果要查看单个路径,则非常有用)。您甚至可以使用git checkout
中的错误来指示该文件不存在,尽管这看起来有点笨拙,而且可能容易出错。
因为您的命令错误它应该像这个git restore --Source HEAD~1 file.txt
注意你的头将被分离
如果你想纠正的是在舞台上,使用这个git restore --staged file.txt
来取消它