图文详解如何修改 git 已提交记录的邮箱?

本贴最后更新于 2003 天前,其中的信息可能已经水流花落

有时候,公司提交的代码必须使用公司邮箱,而你误操作,直接把自己个人邮箱提交上去了,此时你就会遇到这样的需求:如何修改 git 已提交的邮箱?

而这个需求对于新手来说,往往要花费半天的时间才能理解修改过程,简直太傻比了,所以我这里做一个详细的文档来帮助自己和你搞清楚这个流程。尤其要理解变基,它不是一个命令执行就完成了,而是一连串命令的组合。

步骤 1:变基

git rebase -i 

执行后,会打开最近一条的提交记录,当然上面的命令可以指定某一条记录,命令是:

git rebase -i "your commit id"

对于 sourcetree 用户来说,commit id 是 SHA-1,可以右键某条提交记录,选择菜单"复制 SHA-1 到剪贴板",如下图:

image-20190513113342522

变基 rebase 命令执行完成后,会打印类似如下内容:

pick bd81df5 更新API

# Rebase abcb9d0..bd81df5 onto abcb9d0 (1 command)
#
# 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

新手往往会一脸懵逼,不止所错,此时是在 rebase 的过程中,你需要把 pick 改为 edit,如下:

edit bd81df5 更新API

# Rebase abcb9d0..bd81df5 onto abcb9d0 (1 command)
#
# 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

更改完成后,保存并退出 vi 编辑器::wq

然后会打印这样的消息:

chengmingdeMacBook-Pro:server cmlanche$ git rebase -i "abcb9d0d1e99cdad25d8d08119e494436b000e59"
Stopped at bd81df5...  更新API
You can amend the commit now, with

  git commit --amend 

Once you are satisfied with your changes, run

  git rebase --continue
chengmingdeMacBook-Pro:server cmlanche$ 

给大家先科普一下这个 amend 英文单词,是修改的意思,对我来说好陌生,为啥不用 change 或者 fix 之类的。

image-20190513114137949

上面的信息说了,如果你要 amend,也就是要修改这个提交的话,那么用

git commit --amend

如果你对这次修改满意的话,就用如下命令结束此次变基

git rebase --continue

重置账户邮箱信息

我们当然要修改啦,那么执行如下命令,重置提交的账户信息:

git commit --amend --author="cmlanche <1204833748@qq.com>" --no-edit

同事,要注意你的 sourcetree,出现了新情况!

image-20190513114851415

我们可以看到一个新的提交,并且,邮箱账号都经过了修改,如果你去掉 --no-edit 还可以修改 commit message,也就是图中的"更新 API",举栗子吧,我可以继续用 amend 修改此次变基

git commit --amend --author="cmlanche <1204833748@qq.com>"

image-20190513115132114

保存退出 vi 编辑器,看 sourcetree 咋样了:

image-20190513115216969

真的很完美,接下来就是合并了,退出变基。

退出变基

git rebase --continue

在控制台中打印如上命令退出变基,我们看到退出变基也就是使用最新的修改了,就一条分支了。

chengmingdeMacBook-Pro:server cmlanche$ git rebase --continue
Successfully rebased and updated refs/heads/bulma.

image-20190513115442779

最后总结一下

变基真的很有用,他不是一条命令搞定的,是一个过程,就像变成中打开了一个输入流,最后用完你得关闭输入流一样。

通过变基你可以轻松实现提交信息的任意重新修改!

  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    209 引用 • 358 回帖
1 操作
cmlanche 在 2019-05-13 12:53:24 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...