Skip to main content

Command Palette

Search for a command to run...

Git修改当前仓及历史提交人信息

Published
1 min read
Git修改当前仓及历史提交人信息
H

I am ZhangSan, a mere nobody. 我是张三,一个无名小子。

有时候不同项目之间的提交人会弄混或者之前填写的信息错误,需要把信息修正下。

修改当前仓提交人信息

先修改当前仓提交人信息,避免以后再使用全局提交人信息。

cd your-repo-dir
git config user.name  # 查看当前提交人名称
git config user.name "jeeinn" # 修改

git config user.email # 查看当前提交人邮箱
git config user.email "demo@gmail.com" # 修改

如若想修改全局的请在 config后添加 --global 参数

修改历史提交人信息

使用 git filter-branch 内置命令:

注意会有提醒信息,如下

WARNING: git-filter-branch has a glut of gotchas generating mangled history
         rewrites.  Hit Ctrl-C before proceeding to abort, then use an
         alternative filtering tool such as 'git filter-repo'
         (https://github.com/newren/git-filter-repo/) instead.  See the
         filter-branch manual page for more details; to squelch this warning,
         set FILTER_BRANCH_SQUELCH_WARNING=1.

脚本内容:

#!/bin/sh

git filter-branch --env-filter '
OLD_EMAIL="old@email.com"
CORRECT_NAME="jeeinn"
CORRECT_EMAIL="demo@gmail.com"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

正如警告所说,Git现在推荐使用 git filter-repo 工具来代替 git filter-branch,因为它更安全、更快速。

脚本如下,可能需要额外安装 git-filter-repo:(2025年8月14日更)

#!/bin/bash

# 直接使用 --commit-callback 一次性修改
git filter-repo --commit-callback '
    if commit.committer_email == b"old@email.com":
        commit.committer_name = b"jeeinn"
        commit.committer_email = b"demo@gmail.com"
    if commit.author_email == b"old@email.com":
        commit.author_name = b"jeeinn"
        commit.author_email = b"demo@gmail.com"
'

Git 修改提交人信息,到此结束了

More from this blog

git切换分支缓慢问题

背景 最近在项目中 test 分支与 master 分支切换时感到非常慢,大概需要1-2分钟 解决 找出两个分支的最大的差异 # 找出两个分支的差异 git diff --dirstat=files master..test # 输出 98.7% vendor/alipaysdk/openapi/v2/aop/request/ 分别检出两个分支到不同目录,经过比较发现文件主要差异为行尾表现不同,master 分支的文件为 LF、test 分支的为 CRLF。 处理方案 使用 .gitatt...

Feb 10, 20261 min read5

软件生产范式: 从 Ddd 到 Sdd + Tdd 的未来之路

未来的软件系统,很可能不再依赖大量手写的代码,而是依赖可验证的业务规范,以及对这些规范的自动化实现。——这正是从 DDD → SDD + TDD 的演进方向。 在 AI 深度参与软件开发的时代,传统的代码中心开发方式正在加速老化。我们正在经历一次结构性转变:从“写代码”转向“写规范 + 写测试 + 让 AI 自动补全逻辑”。 这篇文章试图提供一个前瞻性的观点(深度使用 vibe coding 近

Dec 9, 20253 min read13
软件生产范式: 从 Ddd 到 Sdd + Tdd 的未来之路

多项目部署时使用不同node版本与包管理器

nvm 项目地址:https://github.com/nvm-sh/nvmcorepack 项目地址:https://github.com/nodejs/corepack#readme 场景 前端多项目依赖不同的 nodejs 版本和不同的包管理器(npm、yarn、pnpm) 解决方案 1、依赖不同 nodejs 版本使用 nvm 来解决,项目中新增 .nvmrc 来指定版本号 2、针对不同包管理器的问题使用node自带的 corepack 来解决 # 使用指定版本 node nvm us...

Nov 5, 20251 min read1

hello1024

46 posts