git 良好實踐之頻繁commit 謹慎push

git 的commit和push是頻繁與謹慎的統一

所謂頻繁,是指對於git commit的頻率定義應該是,在保證每次commit有意義的基礎上“最大限度”的頻繁。
所謂謹慎,是指在push之前壓縮那些臨時的或者無意義的commit,這要靠git 的rebase實現。

使用rebase實現commit壓縮

rebase(變基)主要用來整合來自不同分支的修改,與merge要達到的目的一樣。
它的原理是首先找到兩個分支 的最近共同祖先 ,然後對比當前分支相對於該祖先的歷次提交,提取相應的修改並存爲臨時文件, 然後將當前分支指向目標基底 , 最後以此將之前另存爲臨時文件的修改依序應用。
如果我們將rebase應用在同一分支的之前的某次commit,結果會怎麼樣?
通過以上原理我們可以看出,是的,在一個分支上用沒有任何變化,沒任何用。。。

也不盡然,我們使用交互模式執行rebase,通過簡單修改就可以實現commit的“合併”。

例子

比如,本地修改時做了若干次提交,很亂,如下,總共五次提交

$ git log --pretty=format:"hash: %h commit message: %s"
hash: 5460111 commit message: add s
hash: e48e8b5 commit message: 7
hash: f67f5c8 commit message: 6
hash: 7384f8b commit message: 2-5
hash: 3f13d3f commit message: 1

我們覺得中間提交沒啥意義,而且這幾快照不具有“分別的保存價值”,我們希望合成一個,那麼我們可以依次如下操作

  1. 執行交互的rebase操作
git rebase -i head~4
  1. 上述命令執行完成後,按照以下方法修改文件, squashs都可以

From:

pick 7384f8b 2-5
pick f67f5c8 6
pick e48e8b5 7
pick 5460111 add s

To:

pick 7384f8b 2-5
s f67f5c8 6
squash e48e8b5 7
squash 5460111 add s
  1. 完成修改後保存並提交,這一步是生成壓縮後的提交的commit message,可以不修改,這樣就是羅列這幾次壓縮的messge,也可以按照下邊的方法修改

From:

\# This is a combination of 4 commits.
\# This is the 1st commit message:

2-5

\# This is the commit message #2:

6

\# This is the commit message #3:

7

\# This is the commit message #4:

add s

To:

\# This is a combination of 4 commits.
\# This is the 1st commit message:

change trace log level

到此已經完成commit壓縮的工作,可以push到服務器了,push之前可以log查看一下。

$ git log --pretty=format:"hash: %h commit message: %s"
hash: 4d1f3e2 commit message: change trace log level
hash: 3f13d3f commit message: 1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章