Answers:
从man文件中:
如果
--cached
指定,则暂存内容必须与分支的顶端或磁盘上的文件匹配,从而允许仅从索引中删除文件。
因此,对于单个文件:
git rm --cached mylogfile.log
对于单个目录:
git rm --cached -r mydirectory
svn rm --keep-local
。
git pull
如果您在提交之后仍处于提交之后,这仍会删除文件git rm
git commit -m "Commit message"
和git push
。如果您有任何其他阶段性更改(请使用选中git status
),则这些更改也将在此时提交。
git rm --cached mylogfile.log
并从存储库中删除文件。为了避免在生产系统上丢失文件,我对文件进行备份并在此之后进行提取。如前所述,该文件已被删除,需要从备份中复制回来。这是很痛苦的,但是我没有找到更好的解决方案。
要从存储库中删除整个文件夹(如Resharper文件),请执行以下操作:
git rm -r --cached folderName
我已经提交了一些共享文件,并且不想让其他项目用户继续使用。
Git Push repo branch
才能从远程删除文件。
您还可以基于.gitignore从存储库中删除文件,而无需从本地文件系统中删除它们:
git rm --cached `git ls-files -i -X .gitignore`
或者,或者,在Windows Powershell上:
git rm --cached $(git ls-files -i -X .gitignore)
git ls-files -i -X .gitignore | xargs -I{} git rm --cached "{}"
。请考虑在此处将解决方案修改或添加到答案中,因为它是拥有...的绝佳工具……
.gitkeep
在存储库中保留一个空文件夹。例如。.gitignore
包含文件夹uploads
和存储库被迫跟踪.gitkeep
。通过从回购协议下删除所有内容,uploads
也将删除它.gitkeep
。
根据我在这里的答案:https://stackoverflow.com/questions/6313126/how-to-remove-a-directory-in-my-github-repository
删除目录的步骤
git rm -r --cached File-or-FolderName
git commit -m "Removed folder from repository"
git push origin master
在下次提交中忽略该文件夹的步骤
要在下次提交时忽略该文件夹,请在根目录.gitignore中创建一个文件 ,并将该文件夹名称放入其中。你可以放任意多
.gitignore文件将如下所示
/FolderName
另外,如果您已提交敏感数据(例如,包含密码的文件),则应将其从存储库的历史记录中完全删除。这是解释如何执行此操作的指南:http : //help.github.com/remove-sensitive-data/
更通用的解决方案:
编辑.gitignore
文件。
ECHO mylogfile.log >> .gitignore
从索引中删除所有项目。
git rm -r -f --cached .
重建索引。
git add .
进行新的提交
git commit -m "Removed mylogfile.log"
rm --cashed
是,当一个下拉菜单成功时,它最终将删除该文件?人们说“从存储库中删除文件而不从本地文件系统中删除文件”时,这并不是人们想要的。现在,为什么上面接受的解决方案超出了我的范围?可能是OP独自工作并且从未退出过?不知道。我了解github上的“一劳永逸”的问题
Git允许您通过假定它们不变来忽略这些文件。这是通过运行
git update-index --assume-unchanged path/to/file.txt
命令来完成的。一旦将文件标记为这样,git将完全忽略对该文件的任何更改;它们在运行git status或git diff时不会显示,也永远不会提交。
(来自https://help.github.com/articles/ignoring-files)
因此,不是删除它,而是永远忽略对其所做的更改。我认为这仅在本地有效,因此除非他们运行与上面相同的命令,否则同事仍然可以看到对其的更改。(不过仍然需要对此进行验证。)
注意:这不是直接回答问题,而是基于其他答案的注释中的后续问题。
如果您只想取消跟踪文件,而不是从本地和远程回购中删除,请使用以下命令:
git update-index --assume-unchanged file_name_with_path
以上答案对我没有用。我曾经filter-branch
删除所有提交的文件。
使用以下命令从git存储库中删除文件:
git filter-branch --tree-filter 'rm file'
使用以下命令从git存储库中删除文件夹:
git filter-branch --tree-filter 'rm -rf directory'
这将从所有提交中删除目录或文件。
您可以使用以下命令指定提交:
git filter-branch --tree-filter 'rm -rf directory' HEAD
或范围:
git filter-branch --tree-filter 'rm -rf vendor/gems' t49dse..HEAD
要将所有内容推送到远程,您可以执行以下操作:
git push origin master --force
git rm -r --cached NAME
是招将其从本地git仓库取出,防止它影响人谁后拉(通过删除GIT中的文件或目录的历史。)
注意:这不处理敏感信息的历史记录。
这个过程肯定需要对git进行一些了解。随着时间的流逝,我已经学会了执行以下过程:
.gitignore
以忽略它们-在许多情况下(例如您的情况),父目录(例如log/
将成为要使用的正则表达式)。.gitignore
文件更改(不确定推送是否需要您注意,完成后不会造成伤害)。git remove --cached some_dir/
git add .
git commit -m"removal"