如何在不更改日期的情况下编辑提交作者?

Posted

技术标签:

【中文标题】如何在不更改日期的情况下编辑提交作者?【英文标题】:How to edit commit author without changing date? 【发布时间】:2019-12-08 08:21:25 【问题描述】:

我已经知道如何更改提交的作者(作者和提交字段),

git rebase --root --exec "git commit --amend --reset-author --no-edit"

但随着作者的更改,日期(作者日期和提交日期)从当前日期开始更改。如何在保存旧日期的同时更改作者?

【问题讨论】:

git-scm.com/docs/git-filter-branch,尤其是--env-filter @user3159253 我发现了一些建议这种方法的问题。但这对我没有帮助。 请准确描述您在尝试filter-branch aprroach 时遇到的问题。我很确定它确实有帮助,因为我不久前确实解决了类似的问题。如果我知道你的任务的所有情况,特别是你需要重写多少次提交、多少个分支等等,我可以提供一个准确的解决方案...... @user3159253 2 个分支(master,develop),每个提交都来自 root @user3159253 好的,我在 git pro 中找到了有关 filter-branch 的信息,然后是 this 教程。所以我解决了我的主要问题。谢谢你。附:你能告诉我更多关于 --msg-filter 的信息吗,我如何指向正确的提交进行重写? 【参考方案1】:

这不是您问题的完整解决方案,因为提交日期仍在更新(毕竟这确实会更改提交),但它可能适合任何只想保留作者日期不变。

您可以明确设置作者,而不是使用--reset-author 来更新作者日期。

git rebase --root --exec "git commit --amend --author=John --no-edit"

您可以明确指定您想要作为作者的内容,或者使用搜索模式(上面的示例就是这样做的)。

--作者=

覆盖提交作者。使用标准 A U Thor 格式指定明确的作者。否则被假定为一种模式并用于搜索该作者的现有提交(即 rev-list --all -i --author=);然后从找到的第一个此类提交中复制提交作者。

Source

【讨论】:

【参考方案2】:

使用--ignore-date 标志或--committer-date-is-author-date

git rebase --ignore-date

【讨论】:

我尝试将您的建议命令与我的:$ git rebase --root --ignore-date --exec "git commit --amend --reset-author --no-edit" 结合起来,结果致命:无法将 am 选项与交互式或合并选项结合起来【参考方案3】:

以上所有答案都不适用于我。相反,我使用 git filter-repo 和 --mailmap 选项。安装 git 扩展后,请按照以下步骤操作:

    像这样创建一个my_mailmap 文件:

    New Name <new-mail@address.com> Old Name <old-mail@address.com>
    

    在您的 repos 根目录中运行以下命令:

    git filter-repo --mailmap my_mailmap
    

    (我还需要--force 选项)

但请注意,这会替换整个历史记录中的邮件地址和姓名,请确保您知道自己在做什么。您可以使用git show -s --format=fuller 分别确认提交的作者和提交者日期:

Author:     Author Name <mail@address.com>
AuthorDate: Wed Dec 30 10:27:44 2020 +0100
Commit:     Commiter Name <mail@address.com>
CommitDate: Wed Dec 30 10:27:44 2020 +0100

【讨论】:

以上是关于如何在不更改日期的情况下编辑提交作者?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不影响之后的提交的情况下编辑旧提交

如何在不更改 php 中旧日期值的情况下更新日期?

Rails - 如何在不更改页面和更新视图的情况下提交表单?

如何在不更改现有组件文件的情况下通过插件将日期类型更改为下拉列表

如何使用 git reset 在不丢失本地更改的情况下重置未推送的提交

如何在不提交的情况下将本地服务器上的更改与远程服务器上的更改同步?