Git 修改历史提交中的用户名和邮箱

Git 修改历史提交中的用户名和邮箱

最近几次贡献开源代码总是遇到一个问题,我将 GitHub 上的项目 clone 到本地,完成编码后直接 commit(提交) 。提交后才发现没有使用 git config 来为项目配置私人用户名和邮箱,因此提交中携带的是全局配置中的公司账户信息。为了避免回滚代码,只有寻找办法来修订提交中的信息。本文将要介绍的便是这类修改历史提交中的用户名和邮箱的方法,这些方法也同样适用于修改历史提交中的其它信息,比如 message 等。

首先,通过 git log 命令查看一下最近提交:

F:\Codes\.NETLearning>git log
commit 5e10451f6149808b463c6cdf7bcd08a6f962608e (HEAD -> master)
Author: YeHong <yehong@xxxx.com>
Date:   Sun Nov 4 14:59:10 2018 +0800

    Add Test file

commit a4959ebf3ae7abdab3e98f9eb0e8ef1d6a175b4d
Author: YeHong <yehong@xxxx.com>
Date:   Sun Nov 4 14:58:42 2018 +0800

    Modify README

commit 1bd28ffbd19b6e31b8419d429cdb4aefefa43020 (origin/master, origin/HEAD)
Author: Iron <iron.yehong@outlook.com>
Date:   Sun Nov 4 10:59:06 2018 +0800

    Initial commit

其中,最近的两次提交中携带的是我在公司仓库中的用户名和密码,因此需要将其中的 YeHong <yehong@xxxx.com> 修改为 Iron <iron.yehong@outlook.com>,本文将介绍两种修正方法。

git commit --amend

git commit --amend 命令用于对提交信息进行修订。

修订最近一次提交

git commit --amend --author "Iron <iron.yehong@outlook.com>" --no-edit

输出结果为:

[master 0ace7ed] Add Test file
 Author: Iron <iron.yehong@outlook.com>
 Date: Sun Nov 4 14:59:10 2018 +0800
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 Test.txt

其中,--no-edit 参数可以避免弹出编辑器。如果不带此参数,则会弹出 vim 编辑器让你进一步编辑:

Add Test file

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Author:    Iron <iron.yehong@outlook.com>
# Date:      Sun Nov 4 14:59:10 2018 +0800
#
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#   (use "git push" to publish your local commits)
#
# Changes to be committed:
#       new file:   Test.txt
#

编辑好后,输入 :wq 保存并退出即可。同样,git commit --amend 也可用于修改提交中的其它信息,例如:

git commit --amend --message "Add Test.txt file" --no-edit

修正多个提交

可使用 git rebase -i 来修改最近的多次提交,其后可以跟上最近的提交次数 HEAD~n,或者跟上某次提交的 SHA-1 值。

git rebase -i HEAD~2

或者

git rebase -i 1bd28ffbd19

如上两条命令,前者指的是对最近的两次提交进行交互式变基操作,后者指的是对 SHA-1 值为 1bd28ffbd19 的那次提交(不包括)到最新提交(包括)之间的所有提交进行交互式变基。如上命令会弹出编辑器:

pick a4959eb Modify README
pick 5e10451 Add Test file

# Rebase 1bd28ff..5e10451 onto 1bd28ff (2 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

将需要进行修订的提交前的 pick 改为为 edit

edit a4959eb Modify README
edit 5e10451 Add Test file

然后输入 :wq 保存并退出,输出如下提示:

Stopped at a4959eb...  Modify README
You can amend the commit now, with

  git commit --amend

Once you are satisfied with your changes, run

  git rebase --continue

当前已经停留在 a4959eb... 这次提交处,接下来可以使用前面的 git commit --amend 来进行修订,然后使用 git rebase --continue 跳转到下一个提交:

F:\Codes\.NETLearning>git commit --amend --author "Iron <iron.yehong@outlook.com>" --no-edit
[detached HEAD 24d5789] Modify README
 Date: Sun Nov 4 14:58:42 2018 +0800
 1 file changed, 1 insertion(+), 1 deletion(-)

F:\Codes\.NETLearning>git rebase --continue
Stopped at 5e10451...  Add Test file
You can amend the commit now, with

  git commit --amend

Once you are satisfied with your changes, run

  git rebase --continue

F:\Codes\.NETLearning>git commit --amend --author "Iron <iron.yehong@outlook.com>" --no-edit
[detached HEAD d262e17] Add Test file
 Author: Iron <iron.yehong@outlook.com>
 Date: Sun Nov 4 14:59:10 2018 +0800
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 Test.txt

git filter-branch

git filter-branch 允许使用一个单一命令来大范围地更改历史。

git filter-branch --commit-filter "GIT_AUTHOR_NAME='Iron'; GIT_AUTHOR_EMAIL='iron.yehong@outlook.com'"

其中,--commit-filter 指的是提交过滤器,即对提交内容进行修改。同级的参数还有 --tree-filter--env-filter 等。如上命令的输出结果为:

Rewrite 5e10451f6149808b463c6cdf7bcd08a6f962608e (3/3) (7 seconds passed, remaining 0 predicted)
Ref 'HEAD' was rewritten

即修订了每次提交中的用户名和邮箱,如果只想对符合条件的提交进行修订,则可参考如下脚本:

#!/bin/sh

git filter-branch --commit-filter '
OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi' HEAD

参考资料

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
### 回答1: Git是一种分布式版本控制系统,旨在帮助开发者管理和跟踪代码的修改历史。以下是使用Git的一些基本步骤和教程: 1. 安装Git:首先,需要在计算机上安装Git。可以通过Git官方网站下载适用于操作系统的安装程序进行安装。 2. 创建仓库:在项目目录下,使用命令行窗口或Git GUI工具,运行`git init`命令来创建新的Git仓库。 3. 添加文件:可以使用`git add`命令将文件添加到Git仓库的暂存区域。例如,`git add file1.txt`可以将文件file1.txt添加到暂存区。 4. 提交更改:通过`git commit`命令提交文件更改到Git仓库。例如,`git commit -m "Add file1.txt"`可以将文件更改提交到仓库,并添加相关注释。 5. 查看修改历史:可以使用`git log`命令查看Git仓库提交记录。这将显示提交哈希值、作者、提交时间等信息。 6. 分支管理:可以使用`git branch`命令查看和创建分支。通过`git checkout`命令可以切换到不同的分支。 7. 远程仓库:Git支持与远程仓库进行交互。可以使用`git remote`命令添加、删除和查看远程仓库。例如,`git remote add origin <remote repository URL>`将远程仓库添加为origin。 8. 推送和拉取:可以使用`git push`命令将本地分支的更改推送到远程仓库。而`git pull`命令用于从远程仓库获取最新的更新。 9. 合并和解决冲突:使用`git merge`命令可以将一个分支的更改合并到另一个分支。当两个分支有冲突时,需要手动解决冲突并再次提交。 10. 撤销更改:如果想要撤销某个提交或更改,可以使用`git revert`或`git reset`命令。`git revert`用于创建一个新的提交来撤销之前的更改,而`git reset`可以将HEAD指针重置到之前的提交。 这些是Git的一些基本用法和教程,可以帮助用户开始使用Git来管理和跟踪代码修改历史。希望对您有所帮助! ### 回答2: Git是一种分布式版本控制系统,可以帮助团队协同开发,管理项目代码。以下是Git在使用的教程: 1. 安装Git:首先,我们需要在本地计算机上安装Git。可以去Git官网下载适合自己操作系统的Git安装包,并按照提示进行安装。 2. 创建仓库:在使用Git之前,需要先在项目文件夹下创建一个空的Git仓库。可以通过命令行进入到项目文件夹,并执行命令`git init`来初始化一个Git仓库。 3. 添加文件:将项目所有需要进行版本控制的文件添加到仓库。使用`git add`命令可以将文件添加到缓存区。 4. 提交更改:使用`git commit`命令将缓存区的文件提交到本地仓库,同时需要添加一个有意义的提交信息,用来描述本次提交的更改内容。 5. 查看历史记录:使用`git log`命令可以查看当前仓库的所有提交记录,包括提交者、提交时间和提交信息等。 6. 创建分支:Git的分支功能可以让开发者在同一个项目上同时进行不同的开发工作。使用`git branch`命令可以创建一个新的分支,使用`git checkout`命令可以切换到指定的分支。 7. 合并分支:当在不同分支上开发完毕后,可以使用`git merge`命令将指定分支的更改合并到当前分支上。 8. 撤销更改:如果需要撤销某个文件或整个项目的更改,可以使用`git checkout`命令来恢复到之前的版本。 9. 远程仓库:使用Git可以将本地仓库与远程仓库进行关联,实现代码的远程备份和团队间的协作开发。通过`git remote`命令可以添加和管理远程仓库,使用`git push`命令可以将本地仓库的更改推送到远程仓库。 以上是Git的基本使用教程,通过学习和实践,可以更好地利用Git进行项目的版本控制和团队协作。 ### 回答3: Git是一款分布式版本控制系统,常用于协同开发项目。下面是一个简单的Git使用教程: 1. 安装Git:从Git官方网站上下载合适的安装程序,根据提示进行安装。 2. 配置用户名邮箱:在命令行运行以下命令设置全局用户名邮箱。 `git config --global user.name "Your Name"` `git config --global user.email "your-email@example.com"` 3. 创建仓库:在项目根目录下运行`git init`命令初始化一个Git仓库。 4. 添加文件:使用`git add <file>`命令将文件添加到Git仓库,可以使用通配符*添加多个文件。 5. 提交更改:使用`git commit -m "commit message"`命令提交更改到仓库,-m选项后面是本次提交的说明信息。 6. 查看状态:使用`git status`命令查看当前仓库状态,包括已修改但未提交的文件。 7. 查看版本历史:使用`git log`命令查看仓库的版本历史记录。 8. 切换分支:使用`git branch`命令查看当前分支,使用`git checkout <branch>`命令切换到指定分支。 9. 创建分支:使用`git branch <branch>`命令创建一个新的分支。 10. 合并分支:使用`git merge <branch>`命令将指定分支的更改合并到当前分支。 11. 远程仓库:使用`git remote add origin <remote-url>`命令添加远程仓库地址,使用`git push -u origin master`将本地仓库推送到远程仓库。 12. 克隆仓库:使用`git clone <remote-url>`命令克隆远程仓库到本地。 这是一个简单的Git使用教程,通过这些基本命令可以完成日常开发常见的操作。需要更详细的教程可以参考官方文档或搜索相关资料。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ironyho

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值