2016年12月2日 星期五

git 重寫歷史,使用心得

這一招要小心使用。筆者使用的結果(想改兩個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 [ "$GIT_AUTHOR_EMAIL" = "error@mail.com" ];
then
    GIT_AUTHOR_NAME="right user name";
    GIT_AUTHOR_EMAIL="right@mail.com";
    git commit-tree "$@";
else
    git commit-tree "$@";
fi

if [ "$GIT_COMMITTER_EMAIL" = "error@mail.com" ];
then
    GIT_COMMITTER_NAME="right user name";
    GIT_COMMITTER_EMAIL="right@mail.com";
    git commit-tree "$@";
else
    git commit-tree "$@";
fi
' -- --all

上傳變更

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

沒有留言:

張貼留言