如何優雅地玩轉 commit 信息

js

git是一個開源的分佈式版本控制系統,用於敏捷高效地處理任何或小或大的項目。在開發過程當中,咱們常常會使用到 git 的 commit 命令,使用多了分支的歷史信息就會顯得雜亂無章,最後合併到主分支時會影響主分支歷史信息的優雅性。那麼這個狀況發生時咱們應該如何解決呢?git

接下來咱們看一下一些常見的場景:bash

  • 場景1:

本地已經提交過一次 commit,以後我又修改了內容,可是又不想再提交一次 commit 信息。分佈式

這種狀況可使用 git commit --amend, 這個命令來更改 commit 信息,把這一次的修改合併到該 commit 中,而後保存退出。這樣就達到了保存此次修改的所有內容,而且只提交了一個 commit 信息。ui

  1. 使用 git log 查看提交歷史

log

  1. 修改內容後,使用 git status 查看

status

  1. 使用 git add . 而後 git commit --amend

amend

  1. 修改 commit 信息(若是信息可以描述你後提交的內容,也能夠不修改 commit 信息)後,wq 保存並退出。

fix

  1. 如今咱們再用 git log 查看歷史記錄

log

perfect !!spa

  • 場景2

本地已經屢次 commit,可是顯得雜亂無章,想要把屢次 commit 合併成一次 commit 提交。3d

首先,使用 git log 查看歷史提交信息版本控制

log

這個場景介紹兩種方法解決code

方法一:git reset --softcdn

  1. 使用 git reset --soft somecommitid

reset

注意箭頭所指的地方是你要回退的版本的 commitidblog

  1. 使用 git status 和 git log 查看當前狀態

status

log

經過 git status 能夠看到已經回退了,須要 git commit 保存該修改;經過 git log 能夠看到目前已經回退到第一次提交的版本。

  1. 以後的操做跟場景一相同,使用 git commit --amend 提交信息,這裏就再也不累贅闡述了。

方法二:git rebase -i

  1. 使用 git rebase -i 命令

出現以下界面,紅色框內是操做區域,藍色框內是指令說明區域

rebase

指令說明
pick:意味着包括提交。從新進行命令時,從新安排pick命令的順序會更改提交的順序。若是選擇不包括提交,則應刪除整行。
reword:與類似pick,可是使用後,從新設置過程將暫停併爲您提供更改提交消息的機會。提交所作的任何更改均不受影響。
edit:將有機會修改提交,這意味着您能夠徹底添加或更改提交。您還能夠進行更多提交,而後再繼續進行變基。這使您能夠將大型提交拆分爲較小的提交,或者刪除在提交中所作的錯誤更改。
squash:該命令使您能夠將兩個或多個提交合併爲一個提交。提交被壓縮到其上方的提交中。Git使您有機會編寫描述這兩個更改的新提交消息。
fixup:這相似於squash,可是要合併的提交已丟棄其消息。提交僅合併到其上方的提交中,而且較早提交的消息用於描述這兩個更改。
exec:這使您能夠對提交運行任意的Shell命令。
複製代碼
  1. 把第二次提交和第三次提交都改成 s,以後 wq 保存並退出

ws

  1. 接下來,咱們會進入如下界面,輸入這三次提交的組合commit 信息(箭頭所指之處是這三次提交合併爲一次提交後的 commit 信息),再次 wq 保存並退出。

ws

  1. 再次用 git log 看下歷史狀態

log

perfect !!

git reset --soft commitid 和 git rebase -i 的區別:

git reset --soft commitid: 將代碼回退到某個版本,而後再進性一次提交,這個時候咱們能夠選擇上一個 commit 信息或者新建一個 commit。

git rebase -i: 只是合併 commit 沒有對代碼進性提交,並且 git rebase 能夠合併一個區間,好比我提交了6次,可是我想保留第一次和第六次,那麼咱們就可使用 git rebase -i [startpoint] [endpoint] 將中間的commit 信息合併,若是不指定就是開區間。

  • 情場景三

當咱們的代碼已經推到遠程倉庫後,這個時候咱們該怎麼辦呢?

遇到這樣的狀況也是能夠解決的,咱們能夠按照一二場景合併成咱們須要的 commit message 後,使用 git push -f 命令,這個命令能夠覆蓋掉以前提交的 commit message。可是不建議這樣作,有必定風險存在。若是隻是爲了好看的 commit 最終引起系統 bug,那也就得不償失了。

相關文章
相關標籤/搜索