所以我在bitbucket上有这个两岁的C#
回购。直到昨天它还没有.gitignore
- 我知道,迟到了。
这是一个个人项目。
我可以使用.gitignore
作为基础来清理回购。那么工人会有效地删除.gitignore
所说不应该存在的任何内容吗?
答案 0 :(得分:5)
注意:首先,您更好地对git存储库进行备份,因为它总是会出错(完全行为
git
的{{1}}可以取决于所有类型的设置/ ...所以它不能完全预测过程的结果是什么,所以最好是安全而不是抱歉)。 将目录复制到其他位置就足够了:该目录中有一个(隐藏的).git
目录,其中包含历史记录,标记等。
如果您只想删除新提交的内容,那么您不关心存储在文件系统历史记录中的文件,可以使用以下命令删除它们:
git rm --cached -r .
git add .
rm --cached -r .
表示您要从git存储库中删除所有内容,但将文件保留在文件系统中。你以递归方式执行此操作,因此任何文件都不再是存储库的一部分。接下来,将所有文件再次添加到存储库,但.gitignore
文件将不会重新添加那些应该被忽略的文件。
如果您想要从之前的所有提交中删除这些文件,我建议使用bash脚本。它可能不是最有效的。
现在我们可以做的是列出至少应该被忽略一次的所有文件:
git ls-files --exclude-standard --others --directory --ignored
我首先检查列表并检查是否没有应该保留的文件。相应地更新.gitignore
,如果这些文件都不再出现,则只进入下一步。
如果要保留在存储库中的列表中没有其他文件,则可以运行此脚本:
#!/bin/bash
for f in `git ls-files --exclude-standard --others --directory --ignored`
do
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch '$f'" --prune-empty --tag-name-filter cat -- --all
done
脚本在历史记录中至少迭代一次要忽略的文件,并通过所有提交对文件进行过滤。请注意,文件未从文件系统中删除。但是你将失去这些文件的历史。
此外,标准.gitignore
(例如可以在GitHub上找到)必须要小心,因为我听说运行 Windows <的文件系统上的白/黑名单之间存在差异/ em>的
某些提交可能会消失,因为这些提交的唯一区别是涉及不再属于存储库的文件。例如,如果忽略*.log
文件并且日志包含日期;只有file.log
文件被修改。如果删除该文件,修改文件的提交也将被删除。
答案 1 :(得分:2)
我认为你想要的是:https://stackoverflow.com/a/1139797/3025093
要取消已经添加/初始化到存储库即的单个文件,请停止跟踪该文件,但不要将其从系统中删除:{{ 1}}
要取消现在位于git rm --cached filename
中的每个文件:
首先提交任何未完成的代码更改,然后运行以下命令:
.gitignore
这将从索引(暂存区域)中删除所有已更改的文件,然后运行:
git rm -r --cached .
承诺:
git add .
答案 2 :(得分:0)
您需要在本地克隆项目(如果您还没有),然后手动删除文件或文件夹(不再存在文件或文件夹,即gitignore文件中提到的文件或文件夹)和然后提交那些删除。然后你可以把它推到你的远程仓库。