我想从我的仓库中删除一个文件。
git rm file_to_remove.txt
这将从代码库中删除该文件,同时也会从本地文件系统中删除该文件。如何从代码库中删除该文件,而不删除我本地的文件副本?
我想从我的仓库中删除一个文件。
git rm file_to_remove.txt
这将从代码库中删除该文件,同时也会从本地文件系统中删除该文件。如何从代码库中删除该文件,而不删除我本地的文件副本?
git rm
的文档说明如下:
如果给定了
--cached
,则暂存的内容必须与分支的最新提交或磁盘上的文件匹配,从而允许仅从索引中删除该文件。
因此,对于单个文件:
git rm --cached file_to_remove.txt
并且对于单个目录:
git rm --cached -r directory_to_remove
svn rm --keep-local
那样自解释,所以很容易被忽视。 - Martingit rm
命令后,你的代码库落后于某个提交,那么执行git pull
命令仍会将那些文件删除。 - Petr Pellergit commit -m "Commit message"
和 git push
。如果您有任何其他暂存更改(通过 git status
检查),它们也将同时提交。 - Sinjaigit rm --cached mylogfile.log
并从仓库中删除该文件。 为了避免在生产系统上丢失该文件,我会备份该文件并在此之后进行拉取。 正如之前提到的,该文件将被删除,需要从您的备份中复制回来。 这非常麻烦,但我没有找到更好的解决方法。 - Marcel Grolms要从仓库中删除整个文件夹(例如 Resharper 文件),请执行以下操作:
git rm -r --cached folderName
我已经提交了一些resharper文件,但是不想让其他项目用户保留这些文件。
Git Push 仓库名 分支名
来真正地从远程删除文件。 - RubberDuck根据.gitignore
从仓库中删除文件,而不会从本地文件系统中删除它们:
git rm --cached `git ls-files -i -c -X .gitignore`
对于 Windows Powershell:
git rm --cached $(git ls-files -i -c -X .gitignore)
git ls-files -i -X .gitignore | xargs -I{} git rm --cached "{}"
。请考虑修改或添加此解决方案到答案中,因为它是一个很棒的工具... - mpettis.gitkeep
这样在仓库中保留空文件夹的文件。例如,.gitignore
包含文件夹 uploads
,并且强制存储库跟踪 .gitkeep
。通过从 uploads
下的存储库中删除所有内容,也将删除 .gitkeep
。 - Vladimir Vukanac根据我的回答:https://dev59.com/GG015IYBdhLWcg3w7wMW
删除目录的步骤
git rm -r --cached File-or-FolderName
git commit -m "Removed folder from repository"
git push origin master
忽略某个文件夹在下一次提交中的步骤
要忽略某个文件夹在下一次提交中,只需在根目录下创建一个名为.gitignore的文件,并将该文件夹的名称放入其中。您可以放置任意数量的文件夹名称。
.gitignore文件将如下所示。
/FolderName
更通用的解决方案:
编辑 .gitignore
文件。
echo mylogfile.log >> .gitignore
从索引中删除所有项目。
git rm -r -f --cached .
重新构建索引。
git add .
创建新的提交。
git commit -m "已删除mylogfile.log文件"
rm --cashed
的问题在于,当一个人进行拉取时,它最终会删除文件 - 对吗?当人们说“从存储库中删除文件而不将其从本地文件系统中删除”的时候,这并不是他们想要的。现在为什么接受上述解决方案超出了我的理解 - 可能是因为OP自己工作,并且从未拉取过?不知道。我当然理解github的“一旦推送到那里就永远存在”的问题。 - Mr_and_Mrs_Dgit update-index --assume-unchanged
而不是git rm
。 - mAsT3RpEEgit update-index --assume-unchanged path/to/file.txt
命令来完成。一旦将文件标记为这样,git将完全忽略该文件上的任何更改;在运行git status或git diff时不会显示它们,也永远不会被提交。--no-assume-unchanged
命令会使其恢复吗?在这样做之前,只需将文件保存在某个地方即可?我很好奇,因为我的本地数据库设置文件被忽略了,但我还没有遇到你描述的情况,尽管当我遇到问题时可能只是删除并重新创建它,所以这对我来说不是问题。 - Rystraum如果您想简单地 取消对文件的跟踪,而不从本地或者远端移除,请使用以下命令:
git update-index --assume-unchanged file_name_with_path
注意:这不涉及保护敏感信息的历史记录。
这个过程需要对git的操作有一些理解。随着时间的推移,我已经学会了一些操作,比如:
.gitignore
文件来忽略它们 - 在您的情况下,通常是父目录,例如 log/
。.gitignore
文件更改(不确定是否需要推送,但无伤大雅)。git rm --cached some_dir/
仅从git中删除文件。git add .
git commit -m "removal"
filter-branch
来删除所有已提交的文件。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 中删除文件或目录的历史记录)。 - notbad.jpeg