Max*_*mov 60 git git-filter-branch
我偶然在项目文件夹中添加了9000多张照片.并承诺他们.然后从磁盘中删除它们.承诺.
现在我尝试将更改推送到git服务器.但它需要太长时间并尝试发送12 Gb的数据.
我检查了磁盘上的文件大小,看到真正的.git
文件夹需要12 Gb.
如何从那里删除照片?我试过了git rm
,但失败了:
? git rm public/photos
fatal: pathspec 'public/photos' did not match any files
Run Code Online (Sandbox Code Playgroud)
因为我已经从磁盘上删除了它们,但它们仍然在.git
文件夹中.
我试图添加public/photos
到.gitignore
:
public/photos/
*.zip
Run Code Online (Sandbox Code Playgroud)
但没有结果.当然,我可以hard reset head
在我的项目中没有这么多垃圾照片.但从那时起我多次承诺并在代码中做了很多改变.
mu *_*u 無 67
在您的情况下,使用git filter-branch
而不是git rm
.
git rm
将删除文件,因为它们将不再被git跟踪,但是这并不会删除与这些图像对应的旧提交对象,因此您仍然会推迟对应于12GB图像的早期提交.
的git filter-branch
,而另一方面,可以删除这些文件从所有以前承诺为好,因而消除了需要推动任何人.
使用该命令
git filter-branch --force --index-filter \
'git rm -r --cached --ignore-unmatch public/photos' \
--prune-empty --tag-name-filter cat -- --all
Run Code Online (Sandbox Code Playgroud)筛选器分支完成后,验证没有意外的文件丢失.
现在添加.gitignore规则
echo public/photos >> .gitignore
git add .gitignore && git commit -m "ignore rule for photos"
Run Code Online (Sandbox Code Playgroud)现在做推
git push -f origin branch
Run Code Online (Sandbox Code Playgroud)检查这个,这个和这个以获得进一步的帮助.为了更加安全,我建议您在继续执行这些说明之前在系统上创建repo的备份副本.
至于你的orignial错误消息,它正在发生,因为你已经没有使用它们git rm
,因此git抱怨,因为它无法删除它没有跟踪的文件.在这里阅读更多相关信息.
一个非常简单的答案是.
步骤1:
首先使用git add .
或添加要删除的未跟踪文件git add <filename>
.
第2步:
然后轻松地删除它们使用命令git rm -f <filename>
这里RM =捞出-f = forcely.
要从 git 中删除跟踪的和旧的提交的文件,您可以使用以下命令。就我而言,我想取消跟踪并删除dist
目录中的所有文件。
git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch dist' --tag-name-filter cat -- --all
Run Code Online (Sandbox Code Playgroud)
然后,您需要将其添加到您的中.gitignore
,这样就不会被进一步跟踪。
小智 6
步骤1
将文件名添加到您的.gitignore
文件。
第2步
git filter-branch --force --index-filter \
'git rm -r --cached --ignore-unmatch YOURFILE' \
--prune-empty --tag-name-filter cat -- --all
Run Code Online (Sandbox Code Playgroud)
第三步
git push -f origin branch
Run Code Online (Sandbox Code Playgroud)
非常感谢@mu。
归档时间: |
|
查看次数: |
99510 次 |
最近记录: |