我正在使用下列来源从我的存储库中删除一些大的文件和目录: http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/ 为什么我的git仓库如此之大? git filter-branch似乎只能在当前分支上工作 – 有没有办法一次把它应用到所有分支?
可能重复: 如何从Git中的提交历史清除一个巨大的文件? 我做了一件愚蠢的事情。 想象一下,我犯了一个100MB的文件。 比我看到这个,删除这个文件,并再次提交。 这是删除文件的正常程序。 但现在副作用是我的历史很沉重,因为它保存了这个大文件(我相信这就是为什么它很重)。 我只使用本地git,所以我不同步在任何服务器。 我如何明确地删除这个文件并节省磁盘空间?
我试图从我的远程仓库中删除一个文件运行: git filter-branch –index-filter 'git rm –cached –ignore-unmatch Rakefile' HEAD 但Git抱怨说 无法创build新的备份。 之前的备份已经存在于refs / original / 用-f强制覆盖备份 rm:无法删除/.git-rewrite/backup-refs:权限被拒绝 rm:无法删除目录/.git-rewrite:目录不为空 这是我已经删除Windows上的.git-rewrite目录。 我怎样才能删除该文件? 这是一个29Mb的文件,坐在我的回购,所以我很需要删除该文件。 我试图删除git rebase -i的提交,但显然是因为提交触及了很多不同的文件,Git抱怨冲突,我放弃了安全。
我在Git中做了一系列的提交,现在我意识到我忘了正确设置我的用户名和用户邮件属性(新机器)。 我还没有推送这些提交到我的存储库,所以我怎么才能纠正这些提交之前,我这样做(只有3最新提交的主分支)? 我一直在寻找git reset和git commit -C <id> –reset-author ,但我不认为我在正确的轨道上。
采取以下情况: 我有一些主题分支的工作,现在我已经准备好合并回主: * eb3b733 3 [master] [origin/master] | * b62cae6 2 [topic] |/ * 38abeae 1 我执行从主合并,解决冲突,现在我有: * 8101fe3 Merge branch 'topic' [master] |\ | * b62cae6 2 [topic] * | eb3b733 3 [origin/master] |/ * 38abeae 1 现在,合并花了我一些时间,所以我做了另一个提取,并注意到远程主分支有新的变化: * 8101fe3 Merge branch 'topic' [master] |\ | * b62cae6 2 [topic] | | * e7affba […]
我做了3个git提交,但没有被推送。 我怎样才能修改不是最新的那个(ddc6859af44)和(47175e84c)? $git log commit f4074f289b8a49250b15a4f25ca4b46017454781 Date: Tue Jan 10 10:57:27 2012 -0800 commit ddc6859af448b8fd2e86dd0437c47b6014380a7f Date: Mon Jan 9 16:29:30 2012 -0800 commit 47175e84c2cb7e47520f7dde824718eae3624550 Date: Mon Jan 9 13:13:22 2012 -0800
我有同样的问题在这里问: 在根目录中的新git存储库包含子目录中存在的存储库 我在这里遵循这个答案: 在根目录中的新git存储库包含子目录中存在的存储库 现在, gitk –all显示了两个历史logging:一个在当前的master ,一个名为original/refs/heads/master 。 我不知道这第二个历史是什么,或者如何从回购中删除它。 我的资料库中不需要两个历史logging。 我如何摆脱它? 重现自我: mkdir -p project-root/path/to/module cd project-root/path/to/module mkdir dir1 dir2 dir3 for dir in * ; do touch $dir/source-file-$dir.py ; done git init git add . git commit -m 'Initial commit' 现在我们有原始的海报的问题。 让我们使用上面链接的答案将git仓库的根移到project-root: git filter-branch –tree-filter 'mkdir -p path/to/module ; git mv dir1 dir2 […]
假设你有一个包含三个提交A,B和C的历史logging: ABC 我想将两个提交A和B合并为一个提交AB : AB-C 我试过了 git rebase -i A 打开我的编辑器,内容如下: pick e97a17b B pick asd314f C 我改变这个 squash e97a17b B pick asd314f C 然后Git 1.6.0.4说: Cannot 'squash' without a previous commit 有没有办法,或者这是不可能的?
(解决,请参阅问题主体的底部) 现在找这个已经很久了,到现在为止是这样的: http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/和 http://progit.org/book/ch9-7.html 几乎相同的方法,但他们都留在包文件中的对象…卡住了。 我试过的: git filter-branch –index-filter 'git rm –cached –ignore-unmatch file_name' rm -Rf .git/refs/original rm -Rf .git/logs/ git gc 仍然有包中的文件,这是我知道的: git verify-pack -v .git/objects/pack/pack-3f8c0…bb.idx | sort -k 3 -n | tail -3 和这个: git filter-branch –index-filter "git rm -rf –cached –ignore-unmatch file_name" HEAD rm -rf .git/refs/original/ && git reflog expire –all && […]
你如何压缩你的整个存储库到第一次提交? 我可以重新进行第一次提交,但这会使我有2次提交。 有没有办法在第一个之前引用提交?