修改 Git 已經(jīng)提交記錄的 用戶名 和郵箱

修改 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ā)布

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容