如何我通常着手:的Git从历史删除文件,而不用复制预分支提交
实际上,删除一些文件,从完整的历史,我使用下面的脚本(我称之为混帐紧缩):
#!/bin/bash
#
# git crunch <filenames>
#
git filter-branch --index-filter "git rm --cached --ignore-unmatch $*"
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git fsck --full --unreachable
git repack -A -d
git gc --aggressive --prune=now
它完美地从(完整)历史中删除指定的文件。
的背景是:
我有1项目,该项目分解成4个分公司。这里是显示了4个保持分支2摘要网络图:
┏ a937fd9 (1 year, 9 months ago) <new repo>
...
60 commits later, we create a branch "probe" which is displayed at left of the network
...
┣━┓
┣ ┃ c483a22 (8 months ago)
┃ ┣ f7b402c (3 months ago)
...
┃ ┣━┓
┣ ┃ ┃ 38bb93d (11 days ago)
┣ ┃ ┃ 1ef8202 (11 days ago)
┃ ┃ ┣━[remotes/origin/S...H_adjust]──adb243f (8 days ago)
┃ ┣ ┃ cd02775 (8 days ago)
┃ ┣━┛
┃ ┣ f9e40a3 (8 days ago)
┃ ┣ a30eb6f (7 days ago)
┃ ┣━[remotes/origin/S...H_verif]──4a3fe66 (7 days ago)
┃ ┗━[remotes/origin/HEAD]──[remotes/origin/master]──b452f85 (7 days ago)
┣ 91477ae (4 days ago)
┗━[HEAD]──[probe]──[remotes/origin/probe]──366c890 (48 minutes ago)
我probolem是:
我在这个仓库3个大文件可能从一开始(锐被删除),但是如果我使用我的脚本,它只会在一个分支中运行,并且它会重新创建4个独立的分支,从最开始直到上次提交,这是今天发生的。
我的问题:
我如何能实现这3个文件去除frmo我的整个历史没有从一开始就分开了我的枝叶? 或者,有没有办法重写整个hisotry并一次从所有分支删除文件,所以我可以保持我的进化网络和“共享”提交完好(所以我不让我的61第一次提交重复四次)?
Dupe - http://stackoverflow.com/questions/7430717/git-filter-branch-on-all-branches – 2014-09-30 17:07:54