最近在提交代碼的時候碰到一個問題,代碼commit并push到遠程倉庫后發(fā)現(xiàn)提交人的信息有誤蝗砾,遠程倉庫顯示的提交人不是我先较。雖然這對于開發(fā)來說并無大礙,但身為強迫癥的我怎么能忍遥诉?但代碼已經(jīng)push到遠程倉庫了拇泣,怎么修改記錄里提交人的姓名和郵箱噪叙?
在網(wǎng)上查了一些資料后矮锈,發(fā)現(xiàn)了很多種暴力的解決方法,比如直接刪除整個分支等等睁蕾。這里分享一種相對來說比較優(yōu)雅的方法苞笨。
這里用到了git中的rebase,關(guān)于rebase相關(guān)知識網(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)同步到服務器了。