Git 过滤分支 : possible to update commit messages to reference old commit IDs?

标签 git

我可以在某些代码上成功运行 git filter-branch将另一个 repo merge 到子目录 [1]:

git filter-branch --index-filter '
  git ls-files -s |
  perl -pe "s{\t\"?}{$&helper/}" |
    GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info &&
  mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE
' remotes/helper/master

但现在,我还想扩展每个提交的消息以包括其以前的 ID(SHA 哈希),因为这些提交可能在 GitHub 上有评论/对话,但没有被转移。

例如添加这样的额外行(其中 bob/helpers 是硬编码的/提前已知):

[COPIED FROM bob/helpers@76c7c080b3bd2f93dc78e4864899d668a57cd9f9]

据我所知,Git 的 msg-filter 只给我原始消息,而 Git 的 env-filter 不包含提交 ID(SHA 有) 作为输入变量。那么这可能吗?

谢谢!

[1] 通过this great article , 使用来自 this email thread 的 Perl 过滤器解决 Mac OS X 上的错误。

最佳答案

--msg-filter 将在哪里执行,原始提交 ID 在环境变量 $GIT_COMMIT 中,因此(未经测试)进行消息过滤器简单地:猫; echo "[COPIED FROM bob/helpers@$GIT_COMMIT]".

关于Git 过滤分支 : possible to update commit messages to reference old commit IDs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10248922/

相关文章:

git - 是否可以发送多个 pull 请求来 pull github 提交?

git log - 找出哪个提交添加了特定文件

git - 如何为某些项目禁用 git 而其他项目不在 Visual Studio Code 中禁用 git?

android - <remove-project> 如何在 repo list 中工作?

windows - Cygwin:Git stash -> 无法保存当前索引状态

git - 配置 Git 以使用来自特定位置的 .pem key

git - 如何从 NetBeans IDE 中删除 Git 远程分支?

git - 在没有 parent 的情况下在 gerrit 中提交补丁

git - merge 功能分支而不从共同祖先一直分支?

git - 如何在gitlab中创建和提交分支