从过去的git提交中删除文件

时间:2014-04-03 23:44:33

标签: git

我使用一个充满文件的目录(/vendor/bundle/*)进行了错误的提交。之后我尝试通过更改.gitignore来修复它,所以我做了另外两次提交。

如何从之前的所有提交中删除/vendor/bundle/*目录(不影响任何工作文件或其他提交的文件)?

1 个答案:

答案 0 :(得分:3)

您可以使用交互式rebase从过去的提交中删除目录:

# Go back 3 commits
git rebase -i HEAD~3

您将看到您的编辑器打开了提交列表:

pick <HEAD~2> Commit /vendor/bundle/*
pick <HEAD~1> OMG ignore /vendor/bundle/*!
pick <HEAD>   OMG ignore /vendor/bundle/* again!

选择您提交目录的提交,并将pick替换为edit

edit <HEAD~2> Commit /vendor/bundle/*
pick <HEAD~1> OMG ignore /vendor/bundle/*!
pick <HEAD>   OMG ignore /vendor/bundle/* again!

rebase将回退到该提交并停止。然后执行以下操作:

git rm -r -- /vendor/bundle
git commit --amend --no-edit
git rebase --continue

您可以从FREE online Pro Git book了解有关重写git历史记录的更多信息。