当前位置:首页 > 技术分析 > 正文内容

Git 修改历史提交人(committer)和作者(author)的信息

ruisui884个月前 (03-08)技术分析18

经常性更改个人邮箱,每次修改邮箱后,之前的提交的信息就与本人不同,会导致项目出现多个协作者,非常不爽。有以下几种解决方式。

方式一: 仅修改当前分支。GitHub 会显示为当前日期(Push Date),可以签名(GPG 签名)
方式二:会修改所有分支。GitHub 不会修改为当前日期,但是无法签名(GPG 签名),可配合 git filter-branch 工具签名。

方式一:使用原生的 Git 命令修改

  • 只修改最近一次提交人信息
git commit --amend --author="New Name " --no-edit
  • 修改所有的历史记录
# 所有的历史记录
# 默认情况下,Git 会更新提交的日期。
git rebase -i --root

# 进入 VI 界面后,将所有记录 `commit` 前面的 `pick` 修改为 `edit`
# vi 快捷命令
:%s#pick#edit#g

# 保存
:wq
# 循环执行,直至最后报错
git commit --amend --author="New Name " --no-edit
git rebase --continue

# 或者,使用 shell while 写个循环操作,直至其报错自动退出
while true; do git commit --amend --author="New Name " --no-edit && git rebase --continue || break; done
  • 强制更新
git push --force --all

方式二:使用第三方插件 git-filter-repo 修改

(注意,会清空 git repo url,需要先记录下来)

# 查看 repo url
git remote -v
  • 根据条件指定条件
# 修改 author 信息
git filter-repo --commit-callback '
if commit.author_email == b"old.email@example.com":
    commit.author_name = b"New Name"
    commit.author_email = b"new.email@example.com"
' --force

# 修改 committer 信息
git filter-repo --commit-callback '
if commit.committer_email == b"old.email@example.com":
    commit.committer_email = b"New Name"
    commit.committer_email = b"new.email@example.com"
' --force
  • *(可选)重新签名(打 GPG 签名)
git filter-branch -f --commit-filter '
    git commit-tree -S "$@";
' --tag-name-filter cat -- --branches --tags
  • 恢复 remote url
git remote add origin git@github.com:repo/example.git
  • 强制更新
# 强制更新
git push --force --all

安装 git-filter-repo

pip install git-filter-repo

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2598.html

标签: git删除commit
分享给朋友:

“Git 修改历史提交人(committer)和作者(author)的信息” 的相关文章

发行版Vanilla OS 2发布稳定版:彻底重写、改变使用Linux的方式

Vanilla OS 是去年崭露头角的 Linux 发行版,最初的 1.0 版本基于 Ubuntu 构建 —— 亮点之一是系统核心“不可变”。后来改用 Debian 测试分支 (Debian Sid),免费且开源,默认桌面环境是 GNOME。什么是不可变 Linux 发行版?不可变发行版确保操作系统...

迁移GIT仓库并带有历史提交记录

迁移git仓库开发在很多时候,会遇到一个问题。GIT仓库的管理,特别是仓库的迁移。我需要保留已有的历史记录,而不是重新开发,重头再来。我们可以这样做:使用--mirror模式会把本地的分支都克隆。// 先用--bare克隆裸仓库 git clone git@gitee.com:xxx/testApp...

neovim 0.9在win下配置 python开发环境

初级的一些配置点击下面链接查看neovim安装插件管理器neovim常用快捷键neovim python开发环境简易配置方法 (需要手动键入命令行 运行python)安装neovim python的模块pip install pynvim pip install jedi pip install n...

「云原生」Containerd ctr,crictl 和 nerdctl 命令介绍与实战操作

一、概述作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使用,只是大部分时候我们因熟悉Docker,在部署集群时采用了默认的dockershim。在V1.24起的版本的kubelet就彻底移除了dockershim,改为默认使用Conta...

HTML5+眼球追踪?黑科技颠覆传统手机体验

今天,iH5工具推出一个新的神秘功能——眼动追踪,可以通过摄像头捕捉观众眼球活动!为了给大家具体演示该功能的使用,我做了一个案例,供大家参考。实际效果如下:案例比较简单,就是通过眼动功能获取视觉焦点位置,剔除用户看中的牌。现在,舞台的属性中多了一个“启用眼动”的选项,另外,还多了一个“启用摄像头”的...

VUE 技术栈

官网链接:https://cn.vuejs.org/什么是vue:渐进式JavaScript 框架vue-cli链接:https://cli.vuejs.org/vue-cli安装:npm install -g @vue/clivue -V创建一个项目:vue create xxxxxx模版语法:文...