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

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

ruisui882个月前 (03-08)技术分析9

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

方式一: 仅修改当前分支。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)的信息” 的相关文章

云时代,Linux和容器为王,微软推出自己的发行版Azure Linux

看到今天的微软,其前CEO史蒂夫.鲍尔默肯定会后悔在15年前说过的一句话“Linux 是一种癌症(Linux is a cancer)”。 因为今天的微软不光靠Linux赚的钵满盆满,而且还发行了自己的Linux发行版Azure Linux。为了提高其云服务和容器化服务水平,其Azure公有云平台提...

Vue3 如何实现父子组件传值?

在Vue 3中,要实现父子组件传值效果主要通过props和emit两种机制来实现,下面我们就来详细介绍一下这两种机制。父组件向子组件传值propsprops是Vue组件的一种机制,主要的作用就是实现从父组件向子组件传递数据值,在父组件上通过在子组件标签上定义属性来实现数据属性值的传递,在子组件中通过...

vue项目-父页面数据变化使子页面更新的几种情况

当操作页面时候,特别是增删改操作之后,数据会有所改变,这个时候我们希望组件中的数据要和最新数据一致,就需要重新更新渲染。以下是针对几种不同情况下方式:一.子页面调用接口后重新渲染1.使用ref方式父组件中用ref=“xxx” 来声明子组件,然后通过在父组件值改变的地方来调用子组件中的方法this.$...

「干货」通俗易懂的Deno 入门教程

作者: semlinker转发链接:https://mp.weixin.qq.com/s/2eqRTsf_z7Bcs6dziXe73Q一、Deno 简介Deno 是一个 JavaScript/TypeScript 的运行时,默认使用安全环境执行代码,有着卓越的开发体验。Deno 含有以下功能亮点:默...

Git分布式系统---Gitlab多人工作流程

前言在上一次推文中,我们已经很清楚的讲解了如何创建本地仓库、提交(push)项目到远程仓库以及从远程仓库clone(克隆)项目到本地的相关操作。大家可以先去看前面的推文(快速掌握Git分布式系统操作)点击查看目前无论你是否步入社会还是在校学生,都会使用Gitlab来进行团队的代码管理。(可以这样说:...

el-table内容\n换行解决办法

问题请求到的数据带有换行符 '\n'但页面展示时不换行statusRemark: "\"1、按期完成计划且准确率100%,得100分;\n2、各项目每延误1天,扣1分;每失误1次或者员工投诉1次,扣3分,失误层面达到公司级影响较大的,该项绩效分数为0\"\n&...