我想根据git 文档从 git 历史记录中删除一些文件/文件夹,但由于unstaged changes. 我不清楚可能会有哪些未分阶段的更改,就像我 git add --all之前所做的那样,提交并推送。somefolder/请注意, HEAD 中不再存在要删除的文件夹。它已在早期提交中移动,但旧版本需要从存储库中清除。
~$ git add --all
~$ git commit -m "trying to fix 'Cannot rewrite branches: You have unstaged changes'"
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
~$ git push
Everything up-to-date
~$ git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
~$ git filter-branch --force --index-filter "git rm --cached --ignore-unmatch somefolder/" --prune-empty --tag-name-filter cat -- --all
Cannot rewrite branches: You have unstaged changes.
~$
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题,以便我可以成功运行最后一个命令?
首先,请确保使用最新的 Git (2.26),因为旧版 Git 中存在有关git filter-branch的错误。
其次,您可能希望将存储库克隆为裸存储库,并在那里进行过滤。这将防止任何未暂存的更改,因为裸存储库没有工作树。
但第三,不要使用过时的 BFG 或git filter-branch用于此目的。
使用新工具git filter-repo(直接在常规本地存储库中,尽管在进行此类过滤之前进行备份始终是一个好主意)
使用路径过滤:
git filter-repo --path somefolder/ --invert-paths
Run Code Online (Sandbox Code Playgroud)
somefolder/这将从Git 存储库历史记录中删除。
| 归档时间: |
|
| 查看次数: |
2916 次 |
| 最近记录: |