我需要通过删除旧的提交历史来缩小我长期存在的 GIT 存储库。
像这样转换……
A - B - D - E - ...
\ /
C
Run Code Online (Sandbox Code Playgroud)
进入:
D' - E - ...
Run Code Online (Sandbox Code Playgroud)
提交 E 后的提交历史相当复杂,包含很多分支、标签、合并等。
我不关心其他用户,因为这是一个尚未推送到任何远程存储库的迁移存储库。它是我本地机器上的一个裸仓库。如果需要,我可以将其转换为“正常”。
要创建 D' 并打印其哈希,我可以使用:
git commit-tree D^{tree}
Run Code Online (Sandbox Code Playgroud)
但问题是如何将提交 E 的父级从提交 D 切换到提交 D'?
在这个阶段,我已经找到的大部分技巧都建议在 D' 上做一个 rebase master 分支,但是当你有一个复杂的历史,有十多年的提交,有很多多个分支,标签,合并时,这并不容易等等。
当我 100% 确定新的父提交包含当前提交的所有内容时,是否有任何低级 GIT 命令可以简单地将指针切换到父提交而不执行 git rebase?
您可以使用git filter-repo(项目页面):
文档摘录:
父重写将 $commit_A 替换为 $commit_B(例如,让所有以 $commit_A 作为父项的提交改为以 $commit_B 为父项),并重写历史记录以使其永久化:
Run Code Online (Sandbox Code Playgroud)git replace $commit_A $commit_B git filter-repo --force
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |