您可以使用git commit-tree
内部命令手动执行此操作。
我们要编辑标记的提交1.02-6
以删除虚假的父指针 (to 56a2f3b5948ab54c9239c2b384a6ea9eb1f410c4
)。
首先,从现有的提交对象中读取信息:
user@host:/path/repo.git$ git cat-file -p 1.02-6
tree c658aa1ebcf2bf2a607696c7868b875be72fb01f
parent 56a2f3b5948ab54c9239c2b384a6ea9eb1f410c4
parent 4e671bf1d2298729c9e5cfd8229051cfe2c40831
author James Damour (Suvarov454) <suvarov454@users.sourceforge.net> 1146319620 -0400
committer Bazaar Package Importer <james.westby@ubuntu.com> 1146319620 -0400
The "main/" in the Section line of debian/control should be assumed.
使用 提取提交消息git log --format=%B -n 1 1.02-6
。
现在创建一个具有相同内容的新提交(不包括虚假的父链接和提交者信息):
git log --format=%B -n 1 1.02-6 | \
GIT_AUTHOR_NAME="James Damour (Suvarov454)" \
GIT_AUTHOR_EMAIL="suvarov454@users.sourceforge.net" \
GIT_AUTHOR_DATE="1146319620 -0400" \
git commit-tree c658aa1ebcf2bf2a607696c7868b875be72fb01f \
-p 4e671bf1d2298729c9e5cfd8229051cfe2c40831
这创建了一个新的提交,并打印了它的哈希(cc32e66
...)。现在把它变成一个新的分支:
git checkout -b fixed_commit cc32e66
并重新定位master
到新分支:
git checkout master
git rebase fixed_commit
我们完成了:
![完成的](https://i.stack.imgur.com/KbTYW.png)
您可能想要删除旧分支并重新标记适当的提交。
实际上它可能更容易使用git filter-branch --parent-filter
。我没试过。