Git是目前IT行業使用率最高的版本控制系統,相信大家在日常工作中也經常使用,每次Git送出都會包含送出資訊,常用的包括說明、送出人和送出時間等,此篇文章主要向大家介紹下如何修改這些資訊,這些指令在正常使用時可能不常用,但還是建議收藏以備不時之需。
新送出
指定送出資訊
在使用git commit指令時,通過-m或者--message參數指定本地送出的資訊,示例如下:
git commit -m "<送出資訊>"
指定送出日期
正常的git送出會預設使用目前時間,但在送出時可以通過--date參數來指定送出時間,不過時間内容的格式與日常使用的格式不一緻,此處可以通過git log檢視曆史後複制出來然後進行修改。
git commit -m "<送出資訊>" --date "Thu Jun 29 06:59:36 2023 +0800"
可以看到通過手動指定後第二次送出的時間在第一次送出之前,這與正常送出是不相符的。修改時間可能會導緻git記錄錯亂,僅建議在明确需要修改時間的場景下使用。
指定送出人
正常在送出時git會預設使用目前項目設定的作者資訊,如果未設定則使用本機git全局配置,但在送出時可以通過--author參數指定送出人,參數格式必須為name<email>
git commit -m "change author" --author "aotian<[email protected]>"
可以看到最新一次的送出作業已經與前兩次的不一緻了。
追加送出
在工作中偶爾也會遇到送出完了以後發現漏下了某個檔案的問題,再送出一次雖然可以解決,但git送出記錄會比較難看,強迫症患者看了那是渾身難受,其實我們可以通過追加的方式進行處理,這樣可以僅保留同一個記錄。追加送出時也可以使用以上提到的參數修改送出資訊。
git commit --amend
可以看到ammend之後最近一次送出的資訊已經被修改,但作者和時間并沒有變化。
曆史送出
修改送出說明
如果我們有整理git送出記錄的習慣,那工作中肯定需要去修改曆史送出,此時我們需要先回退到要修改的送出之前,然後進行修改,還是上邊的例子,如果我們需要修改第二次送出,那麼我們需要先回退到第一次送出。
git rebase -i d3dabbe3dce8717b264bba23ee78f19c58bb6fed
執行後會打開一個臨時檔案,在檔案頭部會列出目前送出後續所有的送出(請注意這個清單的順序是按照送出時間順序排列的),每個送出行首的pick字段代表需要執行的操作,具體選項已經在下方注釋中進行了說明,常用的包括預設的pick,修改時使用的reword和edit,二者差別是reword送出後會自動合并,是以隻能編輯送出資訊,而edit送出後會停留在修改的送出,之後可以通過ammend修改送出内容,此處我們僅需要修改送出資訊,是以将第一行pick修改為reword,之後儲存即可。這一部分的操作會因git設定的不一緻可能有所差異,有的指令行裡的vim,有的是外部的編輯器(例如Visual Studio Code等)。
儲存後會自動打開另外一個臨時檔案,這個檔案裡展示的就是上一步中指定的要修改的送出,檔案第一行就是送出資訊,修改後儲存即可完成修改,如果送出資訊内容為空則會中止此次修改,具體内容如下圖:
修改後執行git log檢視送出記錄即可發現中間的内容已經被修改
修改作者或日期
在上一部分我們修改了送出資訊,中間提到過reword和edit的差別,而此處我們修改作者或送出日期則需要使用到edit,同樣使用git rebase -i回退到要修改的内容之前,然後在編輯臨時檔案時将第一行修改為edit,然後儲存,之後我們會看到如下資訊:
此時送出停在了第二個送出處,也就是我們要修改的送出,在控制台的提示中可以看到通過git rebase --continue可以回到最新送出,而我們要修改作者或送出日期則需要使用git commit --amend,這個指令同樣可以使用--date和--author參數。
git commit --amend --author "aotian<[email protected]>" --date "Thu Jun 30 16:59:36 2023 +0800"
執行後會打開臨時檔案确認送出資訊,直接儲存即可,儲存後執行git rebase --continue回到最新送出,然後執行git log檢視送出資訊即可發現中間的送出已經被修改,且時間晚于排在它後面的送出。