2018-03-26
Git
0

目录

git rm
问题:a.txt已经在git仓库,如何进行删除呢?
问题:我们不小心上传了巨大的二进制文件,如何进行删除呢?

Git删除是Git管理非常重要的一块,比起add和commit,我更怕因为错误的删除操作带来的麻烦,因为它是非常致命且难以修复的。所以特此写上一篇关于Git删除的内容

git rm

删除工作目录且从暂存区域移出 如果需将文件从git仓库移出,在git rm后,进行git commit操作,就可以更新git仓库啦。

常用选项:

  • -f 强制覆盖最新检查
  • -r 当给出主目录名时允许递归删除。当你要删除一个目录下的所有文件时,需要用到它
  • --cache 把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中,我们就需要用到它

问题:a.txt已经在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失败。

解决方法:

bash
git filter-branch --tree-filter 'rm -f passwords.txt' HEAD # passwords.txt更换成你需要删除的文件名。

当你又非常的作死的将这个二进制文件取名为中文的时候,可能会导致以上命令无法删除。 当然也有补救的方法:

bash
git filter-branch --tree-filter "find * -type f -name '*~' -delete" HEAD # '*~'更换成你需要的glob模式

git filter-branch详细

本文作者:BARM

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!