如何筛选双根Git仓库中仅源自某一根的提交?
Git多根仓库的历史重写方案
现有一个包含两个根节点的Git仓库,提交结构如下:
A--C--D (HEAD) / B
执行命令:
git filter-branch --commit-filter 'git commit-tree -S "$@";' -- B..D
后,意外重写了提交A的完整历史。实际需求是仅重写git log --ancestry-path=B D返回的提交,同时保留C的合并结构,期望得到的提交结构为:
A--C'--D' / B'
更新说明
更新1
将日志命令从git log --ancestry-path B..D调整为包含根提交B的形式。
更新2C^..D可通过排除C的最左侧父节点实现需求,同时--ancestry-path参数同样适用——多数被git log(传递给git rev-list)支持的参数均有效。因此,重写从B到D的提交最直接的命令为:
git filter-branch \ --commit-filter 'git commit-tree -S "$@";' \ -- --ancestry-path=B D
附:此前更新中的ancestry-path示例曾将B和D的顺序写反。
内容的提问来源于stack exchange,提问作者Marcin Wisnicki
相关产品推荐
相关产品推荐

