最近在提交代碼的時候碰到一個問題,代碼commit并push到遠程倉庫后發(fā)現(xiàn)提交人的信息有誤,遠程倉庫顯示的提交人不是我。雖然這對于開發(fā)來說并無大礙,但身為強迫癥的我怎么能忍?但代碼已經(jīng)push到遠程倉庫了,怎么修改記錄里提交人的姓名和郵箱?
在網(wǎng)上查了一些資料后,發(fā)現(xiàn)了很多種暴力的解決方法,比如直接刪除整個分支等等。這里分享一種相對來說比較優(yōu)雅的方法。
這里用到了git中的rebase,關于rebase相關知識網(wǎng)上很多,這里就不大刀闊斧的講基本原理了,直接上解決方法。
首先我們要查看本地倉庫的commit信息,這里可以打開git bash輸入git log命令查看,也可以使用git GUI圖形界面查看。這里我通過git GUI查看項目的commit信息。
在項目根目錄中打開git GUI界面,這里我沒有其它分支,直接點擊Visualize master's History就可以查看主線的歷史記錄了。
這里可以看到我們每一次commit的信息,包括SHA1 ID的值。這里我們只需要SHA1 ID值的前七位就行了。這里我們以修改前面兩個commit用戶名和郵箱為例。找到前兩個commit前一次commit的SHA1 ID值前七位。這里是795b3a7。
打開git bash,執(zhí)行rebase -i操作。
執(zhí)行后會出現(xiàn)git的vim編輯器,里面會有哈希值為795b3a7的commit之后所有commit的信息。這時按下鍵盤i鍵進入編輯模式,將需要修改的commit信息前面的pick改成edit。按esc退出編輯模式,輸入:wq保存并退出。
這時回到git bash界面,如果看到下面信息就表示成功了,可以開始修改commit信息了。
然后使用git commit --amend --author="zhangsan <zhangsan@qq.com>" --no-edit命令修改提交人的用戶名和郵箱。修改完成后使用git rebase --continue命令繼續(xù)修改下一條。
這時候打開git GUI查看歷史記錄就可以看到commit的信息已經(jīng)被修改了。
然后再無恥的使用git push --force命令將纂改后的歷史記錄強制push到遠程倉庫。(PS:強制更新有風險,使用需謹慎!在你強制更新的時候,如果別人也commit了代碼,將會被你的強制更新覆蓋!)
最后打開GitHub查看項目的歷史記錄可以看到修改的信息已經(jīng)同步到服務器了。