2010-05-27 106 views
69

我已經提交了一堆提交給Github上的項目,但是我意識到我沒有在我目前使用的計算機上設置正確的電子郵件和提交者全名使我的提交,因此用戶頭像和電子郵件地址不存在。Git,重寫以前的提交用戶名和電子郵件

如何重寫所有過去提交的電子郵件和用戶名?

+6

可能的重複[如何更改作者在git提交?](http://stackoverflow.com/questions/750172/how-do-i-change-the-author-of-a-commit -in-git) – givanse 2014-01-08 18:40:05

回答

108

你可以使用這個別名,所以你可以這樣做:

git change-commits GIT_AUTHOR_NAME "old name" "new name" 

或在過去的10個提交:

git change-commits GIT_AUTHOR_EMAIL "[email protected]" "[email protected]" HEAD~10..HEAD 

別名:

change-commits = "!f() { VAR=$1; OLD=$2; NEW=$3; shift 3; git filter-branch --env-filter \"if [[ \\\"$`echo $VAR`\\\" = '$OLD' ]]; then export $VAR='$NEW'; fi\" [email protected]; }; f " 

來源:https://github.com/brauliobo/gitconfig/blob/master/configs/.gitconfig

希望它是有用的。

+1

謝謝,它完美的作品! – josal 2014-03-12 23:16:26

+1

我沒有得到我的標籤,但這個工程。謝謝。 – Bharat 2016-04-21 11:37:58

+5

另外'git change-commitits GIT_COMMITTER_EMAIL「[email protected]」「[email protected]」'更改提交者電子郵件。 – 2017-01-31 21:32:46

50

該解決方案已經存在:Change the author and committer name and e-mail of multiple commits in Git

也就是說,

git filter-branch -f --env-filter \ 
"GIT_AUTHOR_NAME='Newname'; GIT_AUTHOR_EMAIL='newemail'; \ 
GIT_COMMITTER_NAME='committed-name'; GIT_COMMITTER_EMAIL='committed-email';" HEAD 
+2

是否不會改變分支的所有提交(整個歷史)的作者名? – hasen 2010-05-27 17:21:45

+2

是的,這將改變所有提交到新的作者信息。 – ewall 2010-05-28 19:31:25

+2

請將問題標記爲重複,而不是複製粘貼答案。 – givanse 2014-01-08 18:40:59

20

如果你已經迫使一些你提交到公共倉庫,你要做到這一點,或者它會製作其他人可能使用的主人歷史記錄的替代版本。 「不要越過溪流......這將是不好的......」

這就是說,如果它只是你已經提交給你的本地存儲庫的提交,那麼通過一切辦法解決這個問題之前,你推動到服務器。您可以使用git filter-branch命令與--commit-filter選項,所以它只能編輯匹配,你的不正確的信息,這樣的提交:

git filter-branch --commit-filter ' 
     if [ "$GIT_AUTHOR_EMAIL" = "[email protected]_host.local" ]; 
     then 
       GIT_AUTHOR_NAME="Your Name Here (In Lights)"; 
       GIT_AUTHOR_EMAIL="[email protected]_host.com"; 
       git commit-tree "[email protected]"; 
     else 
       git commit-tree "[email protected]"; 
     fi' HEAD 
7

應用奧利維爾迭爾的回答後:

git filter-branch -f --env-filter \ 
"GIT_AUTHOR_NAME='Newname'; GIT_AUTHOR_EMAIL='newemail'; \ 
GIT_COMMITTER_NAME='committed-name'; GIT_COMMITTER_EMAIL='committed-email';" HEAD 

...推改變了歷史的原始資料庫使用:

git push origin +yourbranch 

上面的命令(注意加)力改寫歷史原始回購也是如此。謹慎使用!

+0

爲我工作,也正確地重寫了原點的歷史。 – Xeverous 2017-09-15 23:29:54

+0

這將重寫所有提交 - 不管誰創作它。謹慎使用。 – 2018-02-27 20:36:55

相關問題