首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Git filter-branch重命名多个分支的作者和提交者,包括标记

Git filter-branch是一个强大的工具,可以用于重写Git历史。通过使用filter-branch命令,可以对Git仓库中的提交记录进行修改,包括修改作者和提交者的信息。

使用Git filter-branch重命名多个分支的作者和提交者,可以按照以下步骤进行操作:

  1. 首先,克隆Git仓库到本地:git clone <repository_url>
  2. 进入克隆的仓库目录:cd <repository_directory>
  3. 创建一个脚本文件,用于修改提交记录中的作者和提交者信息。可以使用以下命令创建一个名为rewrite.sh的脚本文件:touch rewrite.sh
  4. 使用文本编辑器打开rewrite.sh文件,并添加以下内容:#!/bin/sh git filter-branch --env-filter ' OLD_EMAIL="old_email@example.com" CORRECT_NAME="New Author Name" CORRECT_EMAIL="new_email@example.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在上述脚本中,将OLD_EMAIL替换为需要修改的旧邮箱地址,将CORRECT_NAME替换为新的作者/提交者名称,将CORRECT_EMAIL替换为新的作者/提交者邮箱地址。
  5. 保存并关闭rewrite.sh文件。
  6. 运行脚本文件,执行重命名操作:sh rewrite.sh执行上述命令后,Git会遍历所有的提交记录,并将符合条件的提交记录中的作者和提交者信息进行修改。
  7. 推送修改后的分支到远程仓库:git push --force --all注意,由于使用了filter-branch命令进行了历史修改,因此需要使用--force选项来强制推送修改后的分支。

这样,使用Git filter-branch重命名多个分支的作者和提交者的操作就完成了。

Git filter-branch的优势在于它可以对Git仓库的历史进行灵活的修改,包括修改作者和提交者信息。这对于需要纠正或更新历史提交记录的情况非常有用。

应用场景:

  • 当Git仓库中的提交记录中包含错误的作者或提交者信息时,可以使用Git filter-branch进行修正。
  • 当需要将一个Git仓库的提交记录迁移到另一个仓库,并且需要保留正确的作者和提交者信息时,可以使用Git filter-branch进行修改。

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

在整个 Git 仓库历史(包括所有分支标签)中修改提交作者信息(姓名邮箱)

一般情况下不建议修改 git 仓库历史。 但是现在我计划开源我一个项目,于是自己个人使用姓名邮箱就需要在开源时候改为使用我公开姓名邮箱。...---- 我打算将整个 Git 仓库历史中名称邮箱。 第一步:打开 Git Bash 进入本地 Git 仓库目录,然后打开 Git Bash。...将以上修改后命令粘贴到 Git Bash 中,然后按下回车键执行命令: 等待命令执行结束,你就能看到你仓库中所有的分支(Branches)、所有的标签(Tags)中作者信息全部被替换为了新作者信息了...使用以下命令推送所有的分支所有的标签。...使用以下命令推送所有的分支所有的标签。

32020

Git 中文参考(六)

如果您 Subversion 存储库在多个路径下放置标记分支,您可以指定多个–tags /或–branches 选项。...当使用多个 - 分支或–tags 时, git svn 不会自动处理名称冲突(例如,如果来自不同路径两个分支具有相同名称,或者分支标记具有相同名称冲突名称)。...确保作者提交者身份信息具有相同时间戳唯一方法是省略author(从而从committer复制)或使用now以外日期格式。...如果省略author,则 fast-import 将自动使用提交者作者部分提交者信息。有关author中字段说明,请参见下文,因为它们与committer相同。...取自当前提交并导出到环境中,以便影响由 git-commit-tree 创建替换提交作者提交者身份[ 1]过滤器运行后

22210

Git基础知识(二)

跳过暂存区 移动文件 在Linux中一般移动重命名都是使用mv操作,Git是Linux创建者Linus写,所以它也是用mv来完成这个操作。...改变文件位置 我们再把1.py从test中拿回来,再改名为2.py使用git status可以看出它告诉我们,我们重命名了一个文件并且它是从1.py重命名过去,也就是git使用最开始记录进行对比变更...an 作者名字 %ae 作者邮箱 %ad 作者修订日期 %ar 修订日期,多久以前 %cn 提交者姓名 %ce 提交者邮箱 %cd 提交日期 %cr 提交日期,多久以前 %s 提交说明 作者指的是实际作出修改的人...提交者指的是最后将此工作成果提交到仓库的人。 在使用GitHub/Gitlab等Git管理服务器进行协作时候,一般都需要通过审核才能将代码合入,所以作者提交者(合入者)很有可能不是一个人。...--author 仅显示指定作者相关提交。 --committer 仅显示指定提交者相关提交。

72930

Git 中文参考(四)

使用--no-tags选项,git fetch <name>不会从远程存储库导入标记。 默认情况下,仅导入已获取分支标记(请参阅 git-fetch [1] )。...相对 _%:作者日期,UNIX 时间戳 _ %ai :作者日期,ISO 8601 样格式 %aI :作者日期,严格 ISO 8601 格式 %cn :提交者名称 %cN...--source 打印出在每个提交到达命令行上给出引用名称。 --use-mailmap 使用 mailmap 文件将作者提交者名称以及电子邮件地址映射到规范真实姓名电子邮件地址。...默认情况下,日期显示在原始时区(提交者作者)中。如果-local附加到格式(例如,iso-local),则使用用户本地时区。...如果文件.mailmap存在于存储库顶层,或者位于 mailmap.file 或 mailmap.blob 配置选项所指向位置,则它用于将作者提交者名称以及电子邮件地址映射到规范真实姓名电子邮件地址

17010

Git 基础命令

#添加指定目录到暂存区,包括子目录 $ git add [dir] #添加当前目录所有文件到暂存区 $ git add ....分支 #列出所有本地分支 $ git branch #列出所有远程分支 $ git branch -r #列出所有本地分支远程分支 $ git branch -a #新建一个分支,但依然停留在当前分支...#重置当前分支指针为指定 commit,同时重置暂存区,但工作区不变 $ git reset [commit] #重置当前分支 HEAD 为指定 commit,同时重置暂存区工作区,与指定 commit...任何情形下,你也可以通过 filter-branch 来一次性修改多个提交中邮箱地址。...需要小心是只修改你自己邮箱地址,所以使用 --commit-filter 来修改: $ git filter-branch --commit-filter ' if [ "$GIT_AUTHOR_EMAIL

46630

【linux命令讲解大全】015 .Git:分布式版本控制系统先驱常用命令清单(四)

git merge test # 将test分支合并到当前分支 分支重命名 重命名分支git branch -m old new #重命名分支 查看分支 列出本地分支:...查看未合并到当前分支分支git branch --no-merged # 查看为合并到当前分支分支 查看remote地址远程分支git remote show origin #...在Git中,服务器上仓库在本地被称为远程(Remote)。个人开发时,可能用到多个远程仓库。...%ad 作者修订日期(可以用 -date= 选项定制格式) %ar 作者修订日期,按多久以前方式显示 %cn 提交者(committer)名字 %ce 提交者电子邮件地址 %cd 提交日期 %cr...您可以根据需要选择相应选项来自定义log输出格式,例如展示作者、提交日期提交说明等信息。

10110

Git实战

[2da7ef1] # 创建分支来保存tag数据,tag只是一个节点标记,无法承载数据修改记录,【分支名】 git checkout -b [branchName] [tagName]...git pull #或者 git checkout 1.0 origin/1.0 开发过程中生成新分支 #因可能存在未被git监管未提交内容,需要将未提交内容进行监管暂存 git add ....git stash #包含[SHA1]及之前代码会被copy盗分支git branch [分支名] [SHA1] 重命名分支git重命名远程分支,其实就是先删除远程分支,然后重命名本地分支...可用选项包括 oneline,short,full,fuller format(后跟指定格式) ​ 例如: git log –pretty=oneline ; git log –pretty...作者修订日期,按多久以前方式显示 ​ %cn 提交者(committer)名字 ​ %ce 提交者电子邮件地址 ​ %cd 提交日期

84710

9.2 Git 与其他系统 - 迁移到 Git

<.*/$1 = /' 这会将日志输出为 XML 格式,然后保留作者信息行、去除重复、去除 XML 标记。 (很显然这只会在安装了 grep、sort 与 perl 机器上运行。)...可以使用 git filter-branch 将全部标识符移除。...这样,在你print_export 方法中第一件要做事就是从目录名字生成一个标记: mark = convert_dir_to_mark(dir) 可以创建一个目录数组并使用索引做为标记,因为标记必须是一个整数...初始信息声明定义了一个提交对象与它所在分支,紧接着一个你生成标记提交者信息与提交信息、然后是一个之前提交,如果它存在的话。...$ ls README.md main.rb 可以通过 fast-import 工具做很多事情 - 处理不同模式、二进制数据、多个分支与合并、标签、进度指示等等。

2K10

Git常用命令参考手册

# 默认以贡献者分组进行输出 git shortlog # 列出提交者代码贡献数量, 打印作者贡献数量 git shortlog -sn # 以提交贡献数量排序并打印出message git shortlog...# 查看 README.md 文件修改历史记录,包括时间、作者以及内容 git blame README.md # 查看谁改动了 README.md 文件 11行-12行 git blame -L...# 撤销工作区文件修改, 不包括新建文件 git restore README.md # 一个文件 git restore README.md README2.md # 多个文件 git restore...image.png image.png 假设有2个分支,main dev,下面使用 git rebase 将 dev 分支代码合并到 main 分支上。...2020-07-02 20:42:20 +0800 %aI 作者日期, ISO 8601风格: 2020-07-02T20:42:20+08:00 %cn 提交者名称 %ce 提交者邮箱 %cd 提交者日期

2.4K30

一篇文章学会使用 gitk,排查 Git 问题就靠它了

miscellaneous options:其他选项,比如:按时间排序,标记分支侧,限制只显示第一个parent,简单历史显示。还可以使用其他 git log参数。...,如2.0.0-beta2③ 黄色标志着当前HEAD,如最顶上HEAD④ 黄色方块标记有“注释”提交(git-notes)(无) 3、右键菜单 可以根据分支commit显示不同菜单,完成不同操作...①选中一个分支,比如diffs check out this branch:检出这个分支,当有多个分支时且当前HEAD不在该分支时可用。 rename this branch:重命名分支。...Headline:commit标题 Comments:commit注释 Author:作者 Committer:提交者 举几个例子: 1、查找标题里包含“request”字符串commit。...2、在区域顶部显示本次提交信息: ①Author:作者。 ②Committer:提交者

5.8K33

从仓库中移除敏感信息

git filter-branch 命令 BFG Repo-Cleaner 会重写你版本库历史记录,这会更改你修改现有提交任何相关提交SHA。更改提交SHA可能会影响仓库中打开请求。...从仓库历史中清除文件 使用 BFG BFG Repo-Cleaner git filter-branch 类似,用于删除不需要文件,是一种更快速、更简单替代方法。...使用 filter-branch 警告:如果你在暂存(stash)更改后运行 git filter-branch,你将无法使用其他暂存命令检索你更改。...这些参数: 强制 Git 处理但不检出每个分支标签整个历史记录 移除指定文件以及作为结果生成任何空提交 重写你现有的标签 git filter-branch --force --index-filter...经过一段时间,你确信 git filter-branch 没有意外副作用,你可以强制你本地仓库中所有对象被解除引用垃圾收集,使用下面的命令(使用Git 1.8.5或更新版本): git for-each-ref

93120

保姆级Git入门教程,万字详解

大概是大二时候开始接触使用Git,从一开始零接触到现在重度依赖,真是感叹 Git 强大。...Git 操作流程如下图所示: 分支(Branch) 分支是为了将修改记录整个流程分开存储,让分开分支不受其它分支影响,所以在同一个数据库里可以同时进行多个不同修改 主分支(Master)...test.html git status --ignored 查看工作区暂存区文件状态,包括被忽略文件 操作分支 git branch “查看、创建、删除分支 git branch -a 查看本地版本库远程版本库上分支列表...hashes %an: 作者名字 %aN: mailmap作者名 %ae: 作者邮箱 %ad: 日期 (--date= 制定格式) %ar: 日期, 相对格式(1 day ago) %cn: 提交者名字...| 1 - 1 file changed, 1 deletion(-) git reflog reflog 可以查看所有分支所有操作记录(包括commitreset操作、已经被删除commit

6.2K32

Git 从入门到放不下

2013年,淘宝前端团队开始全面采用 Git 来做项目管理,我也是那个时候开始接触使用,从一开始零接触到现在重度依赖,真是感叹 Git 强大。...分支(Branch) 分支是为了将修改记录整个流程分开存储,让分开分支不受其它分支影响,所以在同一个数据库里可以同时进行多个不同修改 ?...test.html git status --ignored 查看工作区暂存区文件状态,包括被忽略文件 操作分支 git branch 查看、创建、删除分支 git branch -a 查看本地版本库远程版本库上分支列表...hashes %an: 作者名字 %aN: mailmap作者名 %ae: 作者邮箱 %ad: 日期 (--date= 制定格式) %ar: 日期, 相对格式(1 day ago) %cn: 提交者名字...可以查看所有分支所有操作记录(包括commitreset操作、已经被删除commit记录,跟 git log 区别在于它不能查看已经删除了commit记录 ?

2.2K31

Git常用命令参考手册

假设有 dev  main 2个分支, dev 分支中有10次提交记录, main 分支想把 dev 第5次提交记录合并到当前分支中, 这正是此命令使用场景。...# 默认以贡献者分组进行输出 git shortlog # 列出提交者代码贡献数量, 打印作者贡献数量 git shortlog -sn # 以提交贡献数量排序并打印出message git shortlog...# 查看 README.md 文件修改历史记录,包括时间、作者以及内容 git blame README.md # 查看谁改动了 README.md 文件 11行-12行 git blame -L...假设有2个分支,main dev,下面使用 git rebase 将 dev 分支代码合并到 main 分支上。... 2020-07-02 20:42:20 +0800 %aI 作者日期, ISO 8601风格: 2020-07-02T20:42:20+08:00 %cn 提交者名称 %ce 提交者邮箱 %cd 提交者日期

1.3K60

肝了几夜 Git 图解来了

大概是大二时候开始接触使用Git,从一开始零接触到现在重度依赖,真是感叹 Git 强大。...Git 操作流程如下图所示: 分支(Branch) 分支是为了将修改记录整个流程分开存储,让分开分支不受其它分支影响,所以在同一个数据库里可以同时进行多个不同修改 主分支(Master)...test.html git status --ignored 查看工作区暂存区文件状态,包括被忽略文件 操作分支 git branch “查看、创建、删除分支 git branch -a 查看本地版本库远程版本库上分支列表...hashes %an: 作者名字 %aN: mailmap作者名 %ae: 作者邮箱 %ad: 日期 (--date= 制定格式) %ar: 日期, 相对格式(1 day ago) %cn: 提交者名字...| 1 - 1 file changed, 1 deletion(-) git reflog reflog 可以查看所有分支所有操作记录(包括commitreset操作、已经被删除commit

25430

可以说是一门奶奶级Git入门教程了

大概是大二时候开始接触使用Git,从一开始零接触到现在重度依赖,真是感叹 Git 强大。...Git 操作流程如下图所示: 分支(Branch) 分支是为了将修改记录整个流程分开存储,让分开分支不受其它分支影响,所以在同一个数据库里可以同时进行多个不同修改 主分支(Master)...test.html git status --ignored 查看工作区暂存区文件状态,包括被忽略文件 操作分支 git branch “查看、创建、删除分支 git branch -a 查看本地版本库远程版本库上分支列表...hashes %an: 作者名字 %aN: mailmap作者名 %ae: 作者邮箱 %ad: 日期 (--date= 制定格式) %ar: 日期, 相对格式(1 day ago) %cn: 提交者名字...| 1 - 1 file changed, 1 deletion(-) git reflog reflog 可以查看所有分支所有操作记录(包括commitreset操作、已经被删除commit

1.7K40

git使用步骤_小猪酸奶使用步骤

git log --author=作者 # 查询作者提交记录(grep同时使用要加一个--all--match参数) git log --grep=过滤信息 # 列出提交信息中包含过滤信息提交记录...,比如: 更多规则与定制如下(摘自:Git王者超神之路),或参见:Viewing the Commit History : format对应常用占位符:(注:作者是指最后一次修改文件的人,提交者是提交该文件的人...–until, –before 仅显示指定时间之前提交。 –author 仅显示指定作者相关提交。 –committer 仅显示指定提交者相关提交。...Git标签分两种:轻量标签 附加标签 前者只是在提交上加个Tag,指向提交Hash值; 而后者还会保存打标签者信息,时间附加信息; git tag 标记内容 # 轻量标签 git tag...本地分支 远程分支 # 建立本地分支与远程分支链接 ---- 8.删除远程分支 git push origin :分支名 ---- 9.重命名远程分支 先删除远程分支,然后重命名本地分支,接着再Push

1K10

Git 从入坑到放不下

git branch -m daily/0.0.0 daily/0.0.1 如果觉得之前分支名不合适,可以为新建分支重命名重命名分支名为 daily/0.0.1 git branch 通过不带参数...分支(Branch) 分支是为了将修改记录整个流程分开存储,让分开分支不受其它分支影响,所以在同一个数据库里可以同时进行多个不同修改 ?...test.html git status --ignored 查看工作区暂存区文件状态,包括被忽略文件 操作分支 git branch 查看、创建、删除分支 git branch -a 查看本地版本库远程版本库上分支列表...hashes %an: 作者名字 %aN: mailmap作者名 %ae: 作者邮箱 %ad: 日期 (--date= 制定格式) %ar: 日期, 相对格式(1 day ago) %cn: 提交者名字...可以查看所有分支所有操作记录(包括commitreset操作、已经被删除commit记录,跟 git log 区别在于它不能查看已经删除了commit记录 ?

1.4K30

Git 中文参考(三)

--source 打印出在每个提交到达命令行上给出引用名称。 --use-mailmap 使用 mailmap 文件将作者提交者名称以及电子邮件地址映射到规范真实姓名电子邮件地址。...默认情况下,日期显示在原始时区(提交者作者)中。如果-local附加到格式(例如,iso-local),则使用用户本地时区。...相对 _%:作者日期,UNIX 时间戳 _ %ai :作者日期,ISO 8601 样格式 %aI :作者日期,严格 ISO 8601 格式 %cn :提交者名称 %cN...当涉及重命名/复制时,file1file2分别显示重命名/复制源文件名称重命名/复制文件名称。...git 存储库可以支持多个工作树,允许您一次签出多个分支使用git worktree add,新工作树与存储库相关联。

16810
领券