如何快速批量修改 Git 提交记录中的用户信息

公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

9fd7f1215e8fee78cdbbb39b49bfcc25.png

内网提交需要校验企业邮箱,但有时邮箱设置错误导致 commit 的邮箱有问题,此时可以通过修改已提交记录中的邮箱来修复,无需重新提交。

经过检索,发现两种方法,分别适用于修改一次和修改多次,引文在最后都有注明。

修改最近一次提交的邮箱

$ git commit --amend --author="NewAuthor <NewEmail@address.com>"

批量修改邮箱

使用该脚本,替换其中 [Your Old Email] [Your New Author Name] [Your New Email] 之后在 git 目录中执行即可。

#!/bin/sh

git filter-branch --env-filter '

an="$GIT_AUTHOR_NAME"
am="$GIT_AUTHOR_EMAIL"
cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"

if [ "$GIT_COMMITTER_EMAIL" = "[Your Old Email]" ]
then
    cn="[Your New Author Name]"
    cm="[Your New Email]"
fi
if [ "$GIT_AUTHOR_EMAIL" = "[Your Old Email]" ]
then
    an="[Your New Author Name]"
    am="[Your New Email]"
fi

export GIT_AUTHOR_NAME="$an"
export GIT_AUTHOR_EMAIL="$am"
export GIT_COMMITTER_NAME="$cn"
export GIT_COMMITTER_EMAIL="$cm"

Q&A

  • A previous backup already exists in refs/original/

Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f

出现这一句说明之前曾经执行过 git filter-branch ,在 refs/original/ 有一个备份,这个时候只要删掉那个备份即可,删除备份命令为:

$ git update-ref -d refs/original/refs/heads/master
# 或
$ git filter-branch -f --tree-filter -f 'rm -f test' -- --all

参考文献

  • git 修改提交作者和邮箱

  • git 修改历史提交的用户名和邮箱

本文转载自:「Frytea's Blog」,原文:https://url.hi-linux.com/MEm0k/ ,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

5c00016eb80537dbd4f3a9177397de88.gif

最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。

ee23efa0ee2ea98cd2e0b1aab1bc1138.png

你可能还喜欢

点击下方图片即可阅读

63654f504b68690c990f42ff57abcd75.jpeg

百分百有效』的程序员正确提问方式,你知道吗?

068a8849ff6305f23b0a4576ab5cb706.png

点击上方图片,『美团|饿了么』大额外卖红包天天免费领

fc76d13e3ba6320e93fa30d98718b5a7.png

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

Git,如果你想根据commit ID修改所有历史提交的信息并且推送更新,你需要分几步操作来完成: 1. **获取commit信息**: 首先,通过`git log`命令查看你要修改的commit及其信息,找到对应的commit ID。例如: ```sh git log --oneline ``` 这将显示每个提交的简短信息,包括commit ID。 2. **编辑commit信息**: 使用`git commit --amend`来编辑最近的一次提交,如果要改变所有之前的提交信息,你需要遍历每一个commit并逐个`git rebase -i <commit-id>`。在交互式的编辑模式下(如文本编辑器打开),你可以移动行、删除行或者修改信息,然后保存并退出。记住,`pick`表示保留原样,`edit`表示进入编辑状态。 示例(仅修改最后一次提交): ```sh git commit --amend --no-edit ``` 示例(批量编辑多条commit): ```sh git rebase -i HEAD~n # n是你想要编辑的提交数,从当前提交数起算 ``` 3. **提交新信息**: 修改完毕后,按提示输入命令,比如`e`(edit)对当前修改进行保存,然后关闭编辑器。接下来按照提示完成提交流程。 4. **推送更新**: 确认所有的改动都满意后,你可以使用`git push origin <branch-name> --force-with-lease`来推送更新,这里`origin`是远程仓库名,`<branch-name>`是你想推送到的分支。`--force-with-lease`选项用于避免覆盖其他人的工作,除非本地版本是最新的。 注意:频繁使用`git push --force`可能会破坏协作环境,因为它会强制替换远程分支的历史记录,所以在团队合作谨慎使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值