我需要从我的提交历史记录中删除一个文件。我跟着Github 删除敏感数据的说明 https://help.github.com/articles/remove-sensitive-data:
$ git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch <myfile>' \
--prune-empty --tag-name-filter cat -- --all
...但我一定做错了什么,因为现在我有一堆重复的提交。一组提交仍然有我的文件;另一个则不然。除此之外,它们是相同的。如何删除仍包含我的文件的所有提交?
鉴于问题中的信息、现有答案及其评论,原始发帖人在执行此操作后似乎犯了一些错误git filter-branch
,并且没有制作存储库的备份克隆。
因此,如果这是原始发布者想要做的事情,那么这里是有关将存储库返回到过滤器分支之前的先前状态的说明。
原始参考文献
git filter-branch https://www.kernel.org/pub/software/scm/git/docs/git-filter-branch.html将自动保存对旧提交的引用,以防您因任何原因需要恢复它们。你会在你的仓库下找到它们.git/refs/original/refs/
目录:
ls -l .git/refs/original/refs/heads/
total 1
-rw-r--r-- 1 Keoki Administ 41 May 23 01:13 master
ls -l .git/refs/original/refs/tags/
total 1
-rw-r--r-- 1 Keoki Administ 41 May 23 01:13 v1.0
上述每个引用都包含旧提交的提交 sha ID:
cat .git/refs/original/refs/heads/master
276fc24dc4b12edf75aea40f4fd50e25a5840005
cat .git/refs/original/refs/tags/v1.0
475593a612141506f59a141e38b8c6a3a2917f85
使用硬重置来恢复
为了找回你原来的master
分支(在执行过滤器分支之前),只需使用上面的引用进行硬重置,或使用其中包含的提交 sha ID:
git checkout master
# Use reference
git reset --hard refs/original/refs/heads/master
# Or use sha ID
git reset --hard 276fc24dc4b12edf75aea40f4fd50e25a5840005
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)