我不需要它们,因为它们是自动生成的。它们已经被包含在.gitignore中了。
如果它们之前被跟踪过,那么您的PR将记录它们不再被跟踪(因此被删除),并且被忽略(git check-ignore -v -- a/generated/file
应该在本地返回一个"忽略"规则)。
换句话说,这是预期的行为。
您在评论中说,这些文件“不应该”出现在提交中,因为它们是自动生成的。
但事实是,在某些提交中确实包含了这些文件。这个事实无法改变,因为这些提交无法更改。你最多只能停止使用这些提交,要么将它们留下来以不破坏提交历史,要么将它们剥离开来,使它们难以找到,以便没有人会使用它们(故意损坏历史)。在新的提交中不要包含这些文件。
任何PR都会将这些文件显示为已删除,因为它们是通过比较删除的。也就是说,git checkout
或git switch --detach
到旧的提交时提取这些文件:它们在旧的提交中。然后再切换到更新的提交,这些文件将被删除。
由于它们是自动生成的,所以删除它们是无害的。(如果这样做是有害的,它们就没有被正确地自动生成,也许不应该删除它们。)
删除这些文件并提交可能是正确的做法,这将显示为一次删除,这也是正确的。接受这个事实吧。在.gitignore
中列出这些文件后,可以确保它们不会出现在未来的提交中,但是可能会有一些小缺点。您可能不会遇到这种情况。
如果自动生成这些文件非常慢,请考虑在一个特殊的分支上添加一些特殊的提交,该分支包含这些文件,并根据需要定期更新它们,然后允许人们运行git restore branch -- path/to/generated/files
。这个分支只能包含生成的文件,因为人们将使用git restore
来填充他们的工作树(而不是索引/暂存区)。
git hash-object
,git mktree
,git write-tree
和git commit-tree
会暴露出来。例如,旧的git stash
脚本就使用此功能来创建其两个或三个stash提交。 - torek