Git删除是Git管理非常重要的一块,比起add和commit,我更怕因为错误的删除操作带来的麻烦,因为它是非常致命且难以修复的。所以特此写上一篇关于Git删除的内容。
删除工作目录且从暂存区域移出 如果需将文件从git仓库移出,在git rm后,进行git commit操作,就可以更新git仓库啦。
常用选项:
情况一:a.txt可从工作目录中删除。 git rm a.txt ,如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f。 删除成功后,工作目录和暂存区域都不会存在a.txt,此时我们在git commit进行提交后,当前commit对应的git仓库也不会在有a.txt。
情况二:a.txt还对我有用,不能从工作目录中删除 git rm --cached a.txt,此时只会从暂存区域进行删除,工作目录中依然存在a.txt。但是为了避免下次无意使用git add . 导致a.txt又被添加到暂存区,最好在.gitignore写上忽略规则,当然你如果不会滥用git add .的话,你可以跳过这一步。
当没有将这个巨大的二进制文件提交到git仓库时,一切的修改都会很简单,我们使用git rm 就可以进行挽回。但是此时已经将其提交到git仓库,并且又在其之上git commit了多个版本的话,你会发现就算当你git rm且成功后,也无法将git本地仓库上传到git远程仓库,因为远程仓库无法支持你上传上百M的内容。 那我们不是已经使用git rm 删除了这个巨大的二进制文件吗,怎么还是会出现这个问题呢
git push 是可以将多次commit一并提交的,我们提交的二进制文件可能在其中的一个commit,git就会按commit顺序去增删文件,当遇到我们巨大的二进制文件时,git将会因为文件太大,而停止操作。 从而导致push失败。
解决方法:
bashgit filter-branch --tree-filter 'rm -f passwords.txt' HEAD
# passwords.txt更换成你需要删除的文件名。
当你又非常的作死的将这个二进制文件取名为中文的时候,可能会导致以上命令无法删除。 当然也有补救的方法:
bashgit filter-branch --tree-filter "find * -type f -name '*~' -delete" HEAD
# '*~'更换成你需要的glob模式
本文作者:BARM
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!