git_修改git歷史提交記錄
阿新 • • 發佈:2019-02-18
本修改僅限於修改本地的提交,提交的遠端的請勿修改,以防引起開發者混亂。
首先執行 git rebase -i HEAD~3 這裡首先rebase到HEAD~3的提交,這是你可以修改HEAD~2 - HEAD之間的提交。
此時,git為你提供一個編輯列表,如下:
pick f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added cat-file
如下邊的提示所說,你可以修改前邊的pick,改成edit,表示退出後,git會在那次提交後停下來等待你的進一步修改。此時你可以執行git commit --amend去修改那次提交的註釋。或者你可以git reset HEAD^,去撤銷那次提交,然後做系列的改動並提交,這樣相當於把那次提交拆分成多次提交。然後需要執行 git rebase --continue執行剩下的有pick標記的提交。
你也可以改成squash,表示把所有連續的標記有squash提交與這些行的最上邊的那次pick標記的提交合併成一個提交,退出後修改提交說明即可。
你也可以刪除某些行,或者顛倒某些行的順序,表示你要上出那次提交或者顛倒那些提交的順序。
/*****************************************************/
如果你想批量處理當前branch的所有提交,你可以用git filter-branch命令,該命令會在當前分支的所有提交上上執行引數所描述的操作。如果你要在所有分支的所有提交上執行,可以在後邊加上--all選項。
比如,你想在當前分支上的所有提交上山刪除一個你不小心提交的密碼檔案。你可以執行git filter-branch --tree-filter 'rm -f password.txt' HEAD.
另比如,你想修改你的郵箱為新的郵箱,可如下:
git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "[email protected]" ];
then
GIT_AUTHOR_NAME="new name";
GIT_AUTHOR_EMAIL="new [email protected]";
git commit-tree "[email protected]";
else
git commit-tree "[email protected]";
fi' HEAD