git - 如何更新git提交作者,但修改时保留原始日期?

标签 git

如果提交已经完成并推送到存储库,并且如果想更改某个特定提交的作者,我可以这样做:

git commit --amend --reset-author

但是,这会改变原来的 promise 日期。

如何重置作者,但保留原始提交者的日期?

最佳答案

正如您可能会使用的其他一些答案中提到的:

git commit --amend --reset-author --no-edit --date="<old-date>"

虽然这行得通,但需要大量手动复制或输入才能确定旧日期。您可能希望通过仅获取日志中最后一个条目的日期来自动获取日期:

git log -n 1 --format=%aD

结合两者并使用一些 shell 魔法:

git commit --amend --reset-author --no-edit --date="$(git log -n 1 --format=%aD)"

这会自动将日志中最后一次提交的日期(也就是要修改的日期)设置为更改作者的新提交日期。

现在更改大量提交的作者,比如说因为你忘记在克隆的 git 仓库中设置作者,交互式 rebase 是你的 friend :

git rebase -i <commit before wrong author and email>

然后,您将要调整的所有提交从 pick 更改为 edit 并保存文件。 Git 在每个要编辑的提交上停止,然后您重新运行:

git commit --amend --reset-author --no-edit --date="$(git log -n 1 --format=%aD)" && \
    git rebase --continue

如果提交次数合理,您可以使用 shell arrow-up 键重复此命令,直到 rebase 完成。如果有大量的提交,输入 arrow-up + return 变得太乏味了,你可能想要创建一个小的 shell 脚本来重复上面的命令直到 rebase完成。

关于git - 如何更新git提交作者,但修改时保留原始日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41301627/

相关文章:

git - 在 pull 之前获取最后一次提交的 sha

gitignore - 忽略除指定文件之外的所有文件类型

远程分支的暂存或未暂存更改之间的 Git diff

git - Cherry-pick merge 提交失败,提交为空

ruby-on-rails - 在 Windows 上使用带有本地存储库的 capistrano 进行部署会引发错误

git - 如何在日志中不包含额外的 "committer:"行的情况下转换为 Mercurial?

git - Android Studio 不会忽略 .gitignore 文件

eclipse - 在Eclipse中使用EGit推送到远程Git repo时,我应该选择什么?

python - 使用 gitpython 来区分 pull 请求中的更改

git - 我如何压缩 zlib 数据并找出有多少输入字节?