我不小心提交了一个不需要的文件(文件名。Orig而解决合并)到我的仓库几个提交前,没有我注意到它直到现在。我想从存储库历史记录中完全删除该文件。
是否有可能重写更改历史这样的文件名。奥里格从一开始就没有被添加到存储库中?
我不小心提交了一个不需要的文件(文件名。Orig而解决合并)到我的仓库几个提交前,没有我注意到它直到现在。我想从存储库历史记录中完全删除该文件。
是否有可能重写更改历史这样的文件名。奥里格从一开始就没有被添加到存储库中?
当前回答
为了把它添加到Charles Bailey的解决方案中,我只是使用了git rebase -i来从之前的提交中删除不需要的文件,它就像一个魅力。 的步骤:
# Pick your commit with 'e'
$ git rebase -i
# Perform as many removes as necessary
$ git rm project/code/file.txt
# amend the commit
$ git commit --amend
# continue with rebase
$ git rebase --continue
其他回答
你还可以使用:
git重置HEAD文件/路径
如果你还没有提交任何东西,只需git rm文件和git commit——modify。
如果你有
git filter-branch \
--index-filter 'git rm --cached --ignore-unmatch path/to/file/filename.orig' merge-point..HEAD
将从合并点到HEAD,删除文件名的每个更改。创建并重写更改。使用——ignore-unmatch意味着如果由于某种原因filename. conf命令不会失败。奥里格在变化中消失了。这是git-filter-branch手册页中的示例部分推荐的方法。
Windows用户注意:文件路径必须使用正斜杠
重写Git历史记录需要更改所有受影响的提交id,因此每个参与项目的人都需要删除他们的旧回购副本,并在清理历史记录后进行新的克隆。它给人带来的不便越多,你就越需要一个好的理由来这样做——你多余的文件并没有真正造成问题,但如果你只是在做这个项目,你也可以清理Git历史记录,如果你想的话!
为了尽可能简单,我建议使用BFG Repo-Cleaner,这是一个更简单、更快的Git -filter-branch的替代方案,专门用于从Git历史记录中删除文件。它让你的生活更轻松的一种方式是它实际上默认处理所有的引用(所有标签,分支等),但它也快了10 - 50倍。
你应该仔细遵循以下步骤:http://rtyley.github.com/bfg-repo-cleaner/#usage -但核心是:下载BFG jar(需要Java 6或以上)并运行以下命令:
$ java -jar bfg.jar --delete-files filename.orig my-repo.git
您的整个存储库历史将被扫描,任何名为filename的文件。origin(不在最近一次提交中)将被删除。这比使用git-filter-branch做同样的事情要容易得多!
完全披露:我是好心眼巨人回收清理器的作者。
You should probably clone your repository first.
Remove your file from all branches history:
git filter-branch --tree-filter 'rm -f filename.orig' -- --all
Remove your file just from the current branch:
git filter-branch --tree-filter 'rm -f filename.orig' -- --HEAD
Lastly you should run to remove empty commits:
git filter-branch -f --prune-empty -- --all
如果这是你想要清理的最新提交,我尝试使用git版本2.14.3 (Apple git -98):
touch empty
git init
git add empty
git commit -m init
# 92K .git
du -hs .git
dd if=/dev/random of=./random bs=1m count=5
git add random
git commit -m mistake
# 5.1M .git
du -hs .git
git reset --hard HEAD^
git reflog expire --expire=now --all
git gc --prune=now
# 92K .git
du -hs .git