修改Git提交历史中的author,email和name等信息

简介: 在我们日常工作中,通常由于某种原因,需要更新历史提交的commit信息。一般会有如下几种场景:修改当前分支最新 commit 的提交信息修改当前分支某历史commit的提交信息修改当前分支所有提交的commit信息

在我们日常工作中,通常由于某种原因,需要更新历史提交的commit信息。一般会有如下几种场景:

  • 修改当前分支最新 commit 的提交信息
  • 修改当前分支某历史commit的提交信息
  • 修改当前分支所有提交的commit信息

对于当次提交来说,我们可以显示指定提交者信息。

git commit -m "Initial commit" --author="mn <mn@furzoom.com>"

通过git commit命令将暂存区内容添加到本地仓库后,git会生成相应的commit id。后续我们就可以针对指定的commit id 进行操作,比如,回退到某个commit id,拉取指定commit id的代码等。

下面我们针对上面的三种情况进行讲述。

修改上次提交的commit信息

git commit --amend --author="果冻<liguodongiot@163.com>"

输入git commit --amend之后,进入编辑模式,修改提交信息,然后按wq保存退出。

如果不想修改提交信息,则添加--no-edit,如下所示:

git commit --amend --author="果冻不吃皮 <mn@furzoom.com>" --no-edit

git commit --amend命令只会修改最后一次commit的信息,之前的commit需要使用git rebase

修改上几次提交的commit信息

git rebase -i说明:

git rebase -i命令可以压缩合并多次提交。

格式:git rebase -i [startpoint] [endpoint]

其中,-i的意思是–interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定 [endpoint] ,则该区间的终点默认是当前分支HEAD所指向的commit(该区间指定的是一个前开后闭的区间)。

首先,我们通过git rebase -i选择将哪些提交获得重定位。

例如,合并最近的三次提交:

git rebase -i HEAD~3

或者,合并从当前head到15f745b(commit id)的提交:

git rebase -i 15f745b

然后,在列表中将开头的pick修改为edit,然后重复执行以下命令直到完成:

git commit --amend --author="mn <mn@furzoom.com>"

之后,通过continue命令回到正常状态。

git rebase --continue

修改之前某一个特定的commit信息


查看log,找到上一次提交的commit id

git log

然后,通过git rebase到要修改的commit之前那个commit。

git rebase 928fc8a3686bf5fcf4527873e075703a9998c127 --interactive(与上面git rebase -i类似)

然后,在vi中修改pick为edit,wq保存退出,接着进行内容修改,git addgit commit --amend

修改所有提交的commit信息


前提:重置本项目用户的信息

git config user.name '果冻'
git config user.email 'liguodongiot@163.com'
复制代码


方案一:git rebase

首先回到当前分支第一个commit。

git rebase -i --root

然后,弹出编辑器,在需要修改的commit处,将picked改变为edit,然后wq,退出vi。

git commit --amend --reset-author

之后,通过continue命令回到正常状态。

git rebase --continue

查看日志,确定是否修改成功

git log

最后,强制push到远程仓库

git push origin master -f

方案二:git filter-branch

使用git rebase方式,步骤比较多,可以直接使用 git filter-branch快速方便。

例如,将提交者liguodongiot@163.com修改为liguodongiot@foxmail.com

# !/bin/sh
git filter-branch --env-filter '
OLD_EMAIL="liguodongiot@163.com"
CORRECT_NAME="吃果冻不吐果冻皮"
CORRECT_EMAIL="liguodongiot@foxmail.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
复制代码


总结

修改 commit 提交信息场景 操作命令
修改最新 commit 的提交信息 git commit --amend
修改某历史 commit 的提交信息 git rebase -i father_commitId,其中father_commitId表示上一个commitId
修改第一个 commit 的提交信息 git rebase -i --root

注意:

如需将修改信息同步到远端仓库,可使用 git push -f 命令进行强制同步,该操作会覆盖远端分支的提交历史,请自行确认操作风险。


相关文章
|
开发工具 数据库 数据安全/隐私保护
如何处理 git 中包含数据库密码等隐私信息的 commit?
当你想开源某个内部开发很久的项目或者有一些脚本想要上传到 github,但是这个项目的 git 版本管理中包含了你以前填入的数据库密码,而且是明文,这时候就非常麻烦,这种情况需要如何处理保证项目的 git 能够保证最小修改,尽可能的不去修改过多 commit?看如下操作
|
3月前
|
开发工具 git
GIT:如何合并已commit的信息并进行push操作
通过上述步骤,您可以有效地合并已提交的信息,并保持项目的提交历史整洁。记得在执行这些操作之前备份当前工作状态,以防万一。这样的做法不仅有助于项目维护,也能提升团队协作的效率。
164 4
|
3月前
|
开发工具 git
GIT:如何合并已commit的信息并进行push操作
通过上述步骤,您可以有效地合并已提交的信息,并保持项目的提交历史整洁。记得在执行这些操作之前备份当前工作状态,以防万一。这样的做法不仅有助于项目维护,也能提升团队协作的效率。
282 3
|
持续交付 开发工具 git
如何保留原提交记录迁移Git项目,你还不知道吗?
如何保留原提交记录迁移Git项目,你还不知道吗?
如何保留原提交记录迁移Git项目,你还不知道吗?
|
7月前
|
开发工具 git
git撤销推送到远端仓库的提交commit信息
git撤销推送到远端仓库的提交commit信息
|
存储 开发工具 git
如何从Git存储库中删除不想要的信息(超详细)
如何从Git存储库中删除不想要的信息(超详细)
234 0
|
JSON Rust 数据可视化
这款 Git 信息可视化工具,你一定要试试!
项目源码地址:docs.qq.com/doc/DVHRQUVhKVkN2dUha
182 0
|
人工智能 Rust 自然语言处理
可以从ChatGPT学到什么(二)—— 利用AI自动生成git commit信息
自从上一次写完可以从ChatGPT学到什么(一),简单对ChatGPT有一定了解后,其背后的技术原理是基于OpenAI GPT-3协议去实现的智能对话的。
390 0
|
Shell 网络安全 开发工具
配置Git作者相关信息,以及SSH,全网最简单!
配置Git作者相关信息,以及SSH,全网最简单!
212 0
配置Git作者相关信息,以及SSH,全网最简单!
|
开发工具 git
git/SourceTree修改上一次的提交信息
git/SourceTree修改上一次的提交信息
1143 0