修改 Git 已經(jīng)提交記錄的 用戶名 和郵箱
有關(guān) Git 和版本控制的常見(jiàn)問(wèn)題。

如何更改提交的作者姓名/電子郵件?
在我們進(jìn)入解決方案之前,讓我們找出您到底想要完成什么:
- 在提交之前更改作者信息
- 在提交后更改作者信息(即歷史提交)
讓我們?cè)敿?xì)看看這兩種情況。

更改您的 Git 作者身份
在 Git 中可以通過(guò)三種方式更改提交者身份。所有這些方法只影響未來(lái)的提交,而不影響過(guò)去的提交!
全局更改提交者姓名和電子郵件
您可以使用 --global 標(biāo)志運(yùn)行git config命令;這將確保您未來(lái)的所有提交都使用給定的信息:
$ git config --global user.name "John Doe"
$ git config --global user.email "john@doe.org"
更改單獨(dú)存儲(chǔ)庫(kù)的提交者姓名和電子郵件
如果你只想在某個(gè)存儲(chǔ)庫(kù)中工作時(shí)使用特殊設(shè)置,你可以簡(jiǎn)單地省略 --global 標(biāo)志。這使得配置僅在該存儲(chǔ)庫(kù)中有效:
$ git config user.name "John Doe"
$ git config user.email "john@doe.org"
提醒: 在 Tower 中更改提交者信息
如果您使用的是Tower Git 客戶端,您可以創(chuàng)建和管理多個(gè)“提交者身份”~ 一個(gè)用于工作,一個(gè)用于業(yè)余項(xiàng)目,一個(gè)用于開(kāi)源……然后您可以選擇要在每個(gè)文件上使用的配置文件-存儲(chǔ)庫(kù)甚至是每次提交的基礎(chǔ)!

為下一次提交更改作者信息
最后,使用 --author 標(biāo)志,您還可以覆蓋下一次提交的作者信息:
git commit --author="John Doe <john@doe.org>"
編輯過(guò)去提交的作者
編輯過(guò)去的提交重寫歷史!
無(wú)論我們?nèi)绾尉_地更改過(guò)去提交的信息,始終要牢記一件事:如果我們這樣做,我們實(shí)際上是在重寫提交歷史。
這一點(diǎn)不能掉以輕心:您將在這個(gè)過(guò)程中創(chuàng)建新的提交對(duì)象,這對(duì)您的合作者來(lái)說(shuō)可能會(huì)成為一個(gè)嚴(yán)重的問(wèn)題——因?yàn)樗麄兛赡芤呀?jīng)在一些原始提交的基礎(chǔ)上進(jìn)行了新的工作。
因此,在重寫提交歷史之前請(qǐng)三思!
可以通過(guò)三種基本方法來(lái)編輯過(guò)去的提交:
對(duì)最后一次提交使用 --amend
如果您只想更改最后一次提交,Git 提供了一種非常簡(jiǎn)單的方法來(lái)執(zhí)行此操作:
git commit --amend --author="John Doe <john@doe.org>"
這有效地用您的“編輯”版本替換了最后一次提交,更正了錯(cuò)誤的作者信息。
使用交互式變基
Interactive Rebase 是 Git 中的瑞士軍刀工具:它允許你做和改變幾乎任何事情。然而,盡管它很強(qiáng)大,但這也意味著你很容易搬起石頭砸自己的腳。小心使用它(并可能閱讀它)!
第一步是識(shí)別最后一個(gè)“好的”提交并將其散列提供給 rebase 命令:
$ git rebase -i -p 0ad14fa5

您的編輯器將打開(kāi),要求您使用“edit”關(guān)鍵字標(biāo)記您想要更改的所有提交。
Git 現(xiàn)在將引導(dǎo)您完成每個(gè)提交,讓您有機(jī)會(huì)按照自己的意愿進(jìn)行塑造:
Stopped at 5772b4bf2... Add images to about page
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
現(xiàn)在,您的工作是更正作者信息,然后繼續(xù)處理下一個(gè)相關(guān)的提交對(duì)象,直到您編輯了剛剛標(biāo)記的所有提交:
$ git commit --amend --author="John Doe <john@doe.org>" --no-edit
$ git rebase --continue
使用 git filter-branch 批量修改
另一種方法是使用 Git 的“filter-branch”命令。它允許您使用腳本批處理(可能很大)數(shù)量的提交。
您可以在存儲(chǔ)庫(kù)中運(yùn)行以下示例腳本(為新舊電子郵件和名稱填寫實(shí)際值):
$ git filter-branch --env-filter '
WRONG_EMAIL="wrong@example.com"
NEW_NAME="New Name Value"
NEW_EMAIL="correct@example.com"
if [ "$GIT_COMMITTER_EMAIL" = "$WRONG_EMAIL" ]
then
export GIT_COMMITTER_NAME="$NEW_NAME"
export GIT_COMMITTER_EMAIL="$NEW_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$WRONG_EMAIL" ]
then
export GIT_AUTHOR_NAME="$NEW_NAME"
export GIT_AUTHOR_EMAIL="$NEW_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
與提到的其他方法一樣,同樣的警告適用于此方法:您正在使用此命令重寫歷史記錄,并在此過(guò)程中創(chuàng)建新的提交對(duì)象!
push到倉(cāng)庫(kù):
git push --force
警告 ??: 您應(yīng)該只在尚未發(fā)布/共享的存儲(chǔ)庫(kù)中執(zhí)行此操作。在任何其他情況下,您都應(yīng)該格外小心地使用它,并且只有在您了解副作用的情況下!
原文
本文由mdnice多平臺(tái)發(fā)布