我已经提交了很多文件,现在想要忽略它们。我该如何告诉git在以后的提交中忽略这些文件?
编辑:我确实想从仓库中删除它们。它们是每次构建后创建的文件或用于特定用户工具支持的文件。
我已经提交了很多文件,现在想要忽略它们。我该如何告诉git在以后的提交中忽略这些文件?
编辑:我确实想从仓库中删除它们。它们是每次构建后创建的文件或用于特定用户工具支持的文件。
在编辑.gitignore
以匹配被忽略的文件后,您可以执行git ls-files -ci --exclude-standard
来查看包含在排除列表中的文件。然后您可以执行以下操作:
git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached
git ls-files -ci --exclude-standard | % { git rm --cached "$_" }
for /F "tokens=*" %a in ('git ls-files -ci --exclude-standard') do @git rm --cached "%a"
以将它们从仓库中删除(而不从磁盘上删除)。
编辑: 您还可以将此设置为别名添加到您的.gitconfig文件中,以便随时运行。只需在 [alias] 部分下添加以下行(根据需要修改 Windows 或 Mac):
apply-gitignore = !git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached
(xargs
中的 -r
标志可以防止在结果为空并打印其使用消息时运行 git rm
,但仅可能由 GNU findutils 支持。其他版本的 xargs
可能具有类似的选项。)
现在,您只需要在您的存储库中键入 git apply-gitignore
,它就会为您完成工作!
!
呢?好吧,我的命令是这样的:alias apply-gitignore="git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached"
,谢谢! - Felipe Sabinofor /F "tokens=*" %a in ('git ls-files -ci --exclude-standard') do @git rm --cached "%a"
的命令,它会列出当前Git存储库中未被忽略的所有文件,并从缓存区中删除它们。 - Luke Puplett-r
是默认的,并且不被BSD版本所接受。因此,请删除-r
。 - Weishi Z.gitignore
以匹配您想要忽略的文件git rm --cached /path/to/file
另请参阅:
将文件保留在存储库中,但忽略对其的未来更改:
git update-index --assume-unchanged <file>
要撤消此操作:
git update-index --no-assume-unchanged <file>
要找出哪些文件已经被设置为这种方式:
git ls-files -v|grep '^h'
感谢http://blog.pagebakers.nl/2009/01/29/git-ignoring-changes-in-tracked-files/提供的原始答案。
如果你想忽略已经被Git跟踪的文件中的更改,可以使用以下命令:
git update-index --assume-unchanged <file>
要取消此忽略并再次跟踪更改,请使用以下命令:
git update-index --no-assume-unchanged <file>
git ls-files -ci --exclude-standard -z | xargs -0 git update-index --assume-unchanged
结合使用。 - dlamblingit rm --cached
这样的命令将会从代码库中删除文件,这并不符合测验者的需求。非常感谢你的回答,它对我帮助很大。谢谢。 - ramwin确保你的实际代码库是最新版本且没有进行中的更改
.gitignore
git rm -r --cached .
(删除所有文件)git add .
(根据 gitignore 重新添加所有文件)然后像往常一样提交(commit)
虽然这是一个老问题,但是我们中的一些人使用的是git-posh
(powershell),这是解决该问题的方法:
git ls-files -ci --exclude-standard | foreach { git rm --cached $_ }
.gitignore
文件中。git rm --cached file/path/from/root/folder
git commit
提交您的代码。现在,该文件不应在git status
命令中被跟踪。
编辑 .gitignore 文件后。
git rm -r --cached ./ && git add ./ && git commit -a -m "Removing ignored files" && git push
我经常会忘记或者懒得去读这些git命令的作用。所以我会像这样做:
如果您已经提交了,可以使用以下方法:
git rm --cached *exe
您应该为要删除的每个扩展名执行此操作。
git ls-files -ci --exclude-standard
生成)来改进。 (据我所知,由于其索引锁定机制,Git 不支持并行处理。)$files = git ls-files -ci --exclude-standard
$batchSize = 100
for ($i = 0; $i -lt $files.Count; $i += $batchSize) {
$batch = $files[$i..($i + $batchSize - 1)]
git rm -f --cached $batch
}
$batchSize
的上限是命令行长度的限制。对于较短的路径,您可以使用更大的$batchSize
。