使用git filter branch重写历史记录时保留git笔记

12
由于某些原因,我需要重写整个git仓库的历史记录,以更改每个提交的committer_id。然而,我附加了一个注释到几乎每个提交,并使用git-filter-branch更改committer_id将逻辑上创建新的提交,留下注释。
有没有办法将注释复制到它们匹配的新提交中?
这个thread似乎问类似的问题,但在2011年没有得到解决。
谢谢你的帮助!

2
你有一个OLD_SHA->NEW_SHA的列表吗?或者,由于您只更改了GIT_COMMITTER_NAME,因此可以在orig refs和replacement refs上执行git rev-list并获取它?一旦您拥有了旧->新sha映射,问题就应该很简单。 - Andrew C
好主意,我没有考虑过这种方式。谢谢! - Kiplaki
1个回答

3
问题可能是git-notes需要一些额外的配置才能按照你的意愿工作。你可能需要这个配置变量。
git config notes.rewriteRef refs/notes/commits

从文档中可以看到:https://git-scm.com/docs/git-notes#git-notes-notesrewriteRef
GIT_NOTES_REWRITE_REF 在重新编写提交时,要从原始提交复制哪些笔记。必须是一个用冒号分隔的参考或模式列表。
如果没有在环境中设置,则复制笔记的列表取决于notes.rewrite和notes.rewriteRef设置。
基本上,Git必须得到您的许可才能将笔记从原始提交传输到您正在重写的新提交中。您还可以查看这个Stackoverflow线程以获得更详细的解释:是否有一种方法在合并那些被压缩的注释的提交时自动合并注释?

它没有起作用,但是 git config --global notes.rewriteRef refs/notes/commits 起了作用。 - Stephen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接