【发布时间】:2021-11-02 15:19:39
【问题描述】:
我看到的关于这个问题的所有答案(here,here)只提供了更改最近提交或所有提交的方法,但是我只想更改匹配的过去提交的作者某个谓词。我查看了 git filter-branch(已弃用)、git-filter-repo(它的替代品)和 bfg,但不知道如何进行此更改。
我直观地尝试解决此问题的方式是:
- 首先找到我要更改的所有提交。
- 更改这些提交的作者。
我在历史上与同一作者有其他提交,我确实不想想要更改,我只想更改与某个谓词匹配的提交。
因此对于第 1 步,查找其提交消息具有特定子字符串的所有提交:
git log --pretty=format:'%H %s' | grep 'My Commit Message' | awk '{print $1}'
然后对于第 2 步,我希望能够执行以下操作:
step1command | xargs -I@ git commit --amend --author "New Name <name@email.com>" @
但这似乎没有那么简单。我该怎么办?
谢谢!
【问题讨论】:
-
与您已经看到的答案相同:stackoverflow.com/a/750182/7976758 和 stackoverflow.com/a/4982271/7976758 — 只需在
if中使用不同的谓词。 -
也许我看起来不正确,但我查看了 git 手册页,似乎没有可以在
if中使用的环境变量,它会给我提交消息. -
您在
$GIT_COMMIT中有提交ID,因此您可以使用git show --format="%s" $GIT_COMMIT | grep。你也可以试试--commit-filter;它为您提供每一次检查和修改的提交;请注意,它非常很慢,因为它会检查每个提交到临时目录。 -
查看的第三个选项是
git filter-repo;见examples。 -
谢谢!
git show稍作修改 (-s) 效果很好!
标签: git git-filter-branch