我已經提交了一堆提交給Github上的項目,但是我意識到我沒有在我目前使用的計算機上設置正確的電子郵件和提交者全名使我的提交,因此用戶頭像和電子郵件地址不存在。Git,重寫以前的提交用戶名和電子郵件
如何重寫所有過去提交的電子郵件和用戶名?
我已經提交了一堆提交給Github上的項目,但是我意識到我沒有在我目前使用的計算機上設置正確的電子郵件和提交者全名使我的提交,因此用戶頭像和電子郵件地址不存在。Git,重寫以前的提交用戶名和電子郵件
如何重寫所有過去提交的電子郵件和用戶名?
你可以使用這個別名,所以你可以這樣做:
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
希望它是有用的。
該解決方案已經存在: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
如果你已經迫使一些你提交到公共倉庫,你不要做到這一點,或者它會製作其他人可能使用的主人歷史記錄的替代版本。 「不要越過溪流......這將是不好的......」
這就是說,如果它只是你已經提交給你的本地存儲庫的提交,那麼通過一切辦法解決這個問題之前,你推動到服務器。您可以使用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
應用奧利維爾迭爾的回答後:
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
上面的命令(注意加)力改寫歷史原始回購也是如此。謹慎使用!
爲我工作,也正確地重寫了原點的歷史。 – Xeverous 2017-09-15 23:29:54
這將重寫所有提交 - 不管誰創作它。謹慎使用。 – 2018-02-27 20:36:55
可能的重複[如何更改作者在git提交?](http://stackoverflow.com/questions/750172/how-do-i-change-the-author-of-a-commit -in-git) – givanse 2014-01-08 18:40:05