git 重寫歷史,使用心得

  1. git 重寫歷史,使用心得
    1. 修改提交者資料
      1. 列出提交者name與mail
      2. 修改歷史中提交者的name與mail
      3. 上傳變更

git 重寫歷史,使用心得

原文連結: https://darkblack02.blogspot.com/2016/12/git.html
移植時的最後更新日期: 2016-12-07T11:55:38.420+08:00

這一招要小心使用。筆者使用的結果(想改兩個commiter和author, 所以掃了很多次之後),commit出現重複的了!QQ

修改提交者資料


列出提交者name與mail

下面指令是查詢目前提交者名稱與mail, 並且依提交次數排序
$ git shortlog --numbered --summary --email
下面的指令是查詢目前要修改的commiter的提交內容的author和commiter是長什麼樣子
$ git log --pretty=format:"%an<%ae> - %cn<%ce>" --committer=error user name
下面的指令是查詢目前要修改的author的提交內容的author和commiter是長什麼樣子
$ git log --pretty=format:"%an<%ae> - %cn<%ce>" --author=error user name

修改歷史中提交者的name與mail

在所有分支內
找出所有提交者是error@mail.com,並且改該次commit的提交者name成為right user name,email改成right@mail.com
找出所有作者是error@mail.com,並且改該次commit的作者name成為right user name,email改成right@mail.com
$ git filter-branch --commit-filter ‘
if [ “GITAUTHOREMAIL"="error@mail.com"];<br/>then<br/>GITAUTHORNAME="rightusername";<br/>GITAUTHOREMAIL="right@mail.com";<br/>gitcommittree"GIT_AUTHOR_EMAIL" = "error@mail.com" ];<br />then<br /> GIT_AUTHOR_NAME="right user name";<br /> GIT_AUTHOR_EMAIL="right@mail.com";<br /> git commit-tree "@”;
else
git commit-tree “@";<br/>fi<br/><br/>if["@";<br />fi<br /><br />if [ "GIT_COMMITTER_EMAIL” = "error@mail.com" ];
then
GIT_COMMITTER_NAME=“right user name”;
GIT_COMMITTER_EMAIL="right@mail.com";
git commit-tree “@";<br/>else<br/>gitcommittree"@";<br />else<br /> git commit-tree "@”;
fi
’ – --all

上傳變更

結束之後,若你修改已push過的commit,那麼在沒有人與你一起協作的情況之下。只要使用下面的指令,即可上傳這樣的改變
$ git push -f --all