在更新gitignore文件后,是否可以“刷新”git仓库?我只是添加了更多的无知(?)到我的gitignore,并希望删除与新文件匹配的存储库中已有的内容。
jdzmm42g1#
“.gitignore file not ignoring“中提到的解决方案有点极端,但应该可以工作:
# rm all files git rm -r --cached . # add all files as per new .gitignore git add . # now, commit for new .gitignore to apply git commit -m ".gitignore is now working"
(请确保首先提交您想要保留的更改,以避免以下jball037评论中的任何事件。但是--cached选项将使您的文件在磁盘上保持不变。在博客文章“Making Git ignore already-tracked files”中,您还可以找到其他更细粒度的解决方案:
--cached
git rm --cached `git ls-files -i --exclude-standard`
Bassim建议使用in his edit:
如果您收到类似fatal: path spec '...' did not match any files的错误消息,则可能存在路径中包含空格的文件。您可以使用选项--ignore-unmatch删除所有其他文件:
fatal: path spec '...' did not match any files
--ignore-unmatch
git rm --cached --ignore-unmatch `git ls-files -i --exclude-standard`
但不匹配的文件将保留在您的存储库中,并且必须通过用双引号括起其路径来显式删除:
git rm --cached "<path.to.remaining.file>"
4ktjp1zp2#
我可能会误解,但是您是要删除新忽略的文件,还是要忽略对这些文件的新修改?在这种情况下,事情正在工作。如果要删除以前提交的已忽略文件,请使用
git rm –cached `git ls-files -i –exclude-standard` git commit -m 'clean up'
qgelzfjb3#
我知道这是一个老问题,但如果文件名中包含空格,gracchus的解决方案就不起作用了。VonC对带有空格的文件名的解决方案是不使用--ignore-unmatch删除它们,然后手动删除它们,但如果有很多空格,这将无法正常工作。下面是一个利用bash数组捕获所有文件的解决方案。
# Build bash array of the file names while read -r file; do rmlist+=( "$file" ) done < <(git ls-files -i --exclude-standard) git rm --cached "${rmlist[@]}" git commit -m 'ignore update'
3条答案
按热度按时间jdzmm42g1#
“.gitignore file not ignoring“中提到的解决方案有点极端,但应该可以工作:
(请确保首先提交您想要保留的更改,以避免以下jball037评论中的任何事件。
但是
--cached
选项将使您的文件在磁盘上保持不变。在博客文章“Making Git ignore already-tracked files”中,您还可以找到其他更细粒度的解决方案:
Bassim建议使用in his edit:
路径中有空格的文件
如果您收到类似
fatal: path spec '...' did not match any files
的错误消息,则可能存在路径中包含空格的文件。您可以使用选项
--ignore-unmatch
删除所有其他文件:但不匹配的文件将保留在您的存储库中,并且必须通过用双引号括起其路径来显式删除:
4ktjp1zp2#
我可能会误解,但是您是要删除新忽略的文件,还是要忽略对这些文件的新修改?在这种情况下,事情正在工作。
如果要删除以前提交的已忽略文件,请使用
qgelzfjb3#
我知道这是一个老问题,但如果文件名中包含空格,gracchus的解决方案就不起作用了。VonC对带有空格的文件名的解决方案是不使用
--ignore-unmatch
删除它们,然后手动删除它们,但如果有很多空格,这将无法正常工作。下面是一个利用bash数组捕获所有文件的解决方案。