iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 22
5

良好程式碼的優點大同小異。
不好的程式碼的糙點卻各有巧妙之處。

怎麼連程式碼無關的 git log 都被拿出來說嘴?

你記得,你上一次看 git log 是為了什麼嗎?

為了解一個不知道什麼時候長出來的 bug ?
為了找出是誰長出了這個 bug ?
這個功能上次是誰寫的?有(「糙」方面的)問題可以問他?

不管是什麼,是為了程式碼帶給你的困惑,所以看 git log。
但是,整個過程似乎在演國家寶藏

當你破解一個線索之後,只會得到了更多的線索
-- 國家寶藏

當你抱著疑惑來看 git log,看到什麼 log 會讓你覺得神清氣爽?

來看看幾個 git log

以下的 commit 你看得懂多少?

629d3c6 add price range bar
486b5a5 range slider bar needs to be implemented~~
6c11640 finish header RWD
852ad5b finish contentTop RWD
8aa867f finish contentMid RWD
233e16c finish footer rwd
268e718 do something....
826334e finish footer
56b0e6a finish dynamic tabs and half of contentmid
a31eda5 contentTop version1
67834d8 header version1
d4098ee init html
0310150 init
  • 獲得的訊息
    • 這似乎有交待它完成了什麼
    • 268e718 do something.... 這個是做了什麼?/images/emoticon/emoticon10.gif
53c85e0 ver3
45772b7 ver2
1e17624 ver1
3faa384 version3
2e42d5b version2
2ee2ef6 version1
8f828bc version1
7be659e Merge branch (略...)
  • 獲得的訊息
    • 知道版本的演進,但是不知道該版本的差異 (看 git diff ?)
  • 你所不知道的 git log
    • 版號可以使用 tag 標示!!(這樣 git log 就剩下?)/images/emoticon/emoticon17.gif
41c1c78 12/2
3773044 12/1 -3
058b5f3 11/30 -3
5a761bc Merge branch (略...)
fecd73c 11/26 -3
b048697 11/26 -2
4514422 11/25 -2
2aaa057 init commit
  • 獲得的訊息
    • 很明顯的看得到日期
  • 你所不知道的 git log
    • 版號可以使用 tag 標示!!
    • 每個 commit 都有日期...所以不用再寫了/images/emoticon/emoticon33.gif
871d358 Upload New File
7c0728e Upload New File
efdb8f5 Upload New File
38bb5f0 Upload New File
a0d7546 Upload New File
bad170c Upload New File
236516a Upload New File
d6ac264 Upload New File
587be6b Upload New File
57a9eb4 Upload New File
94d470e Upload New File
2f1e9f7 Upload New File
9df80fc Upload New File
dae1f94 Upload New File
3ff7f1d Upload New File
1fa2ec9 Upload New File
2a1f511 Upload New File
c5774b2 Upload New File
6e0ed48 Upload New File
5d31c8c Upload New File
12f1613 Upload New File
40c8df7 Upload New File
476e3a1 Upload New File
4c8adca Upload New File
afd6c6d Upload New File
38ed6be Upload New File
80d3553 Add new directory
cdc10c5 Delete .gitkeep
51eaf1a Add new directory
de0e795 Upload New File
d5a1d2e Upload New File
f75ebe5 Upload New File
ee89b27 css
68bc1bd Upload New File
2180d67 Upload New File
c9d3801 Delete .gitkeep
  • 獲得的訊息
    • 80d3553 Add new directory 知道新增一個資料夾,什麼名字?在哪?會怎樣嗎?
    • cdc10c5 Delete .gitkeep 刪除了 .gitkeep ,造成了誰變空資料夾嗎?
  • 你所不知道的 git log
    • 每個 commit 都有上傳檔案,不用強調這件事。/images/emoticon/emoticon06.gif
5092a69 ver1
2172d75 delete
b5cb809 create
111d85e create
  • 獲得的訊息
    • 增加兩次檔案,一次減少檔案,獲得版本 1 /images/emoticon/emoticon04.gif
4eaaacd .
c1984ed .
9aa08ec clear
7ec4b1c .
4c0401b .
3b62cf6 .
5b1e776 .
4767977 .
f0f9a6b .
e67f7a0 .
89b73c0 .
f3ab39f .
7fa7695 .
cb58ec9 .
d45c6fe .
a5c4812 .
164f7e0 ver1
  • 獲得的訊息
    • 本篇最強/images/emoticon/emoticon14.gif/images/emoticon/emoticon17.gif/images/emoticon/emoticon82.gif
    • 屈原曰:「舉世皆濁我獨清,眾人皆醉我獨醒,是以見放。」
    • 唐伯虎:「別人笑我太瘋癲,我笑他人看不穿。」

相對上面,比較好猜的

e8f4585 fix bug
0074496 modify footer RWD
d847776 modify product RWD
bb7d1ac modify space and menu
1158fc8 modify filter RWD
cc5c8d3 modify product detail
9dc2d97 modify footer
4824cd1 modify product detail
5052a50 modify page detail
3a61fb5 add images in html file
905f79d modify HTML struct
a87feb7 add HTML
bc56a8c commit
1c24507 rwd
62c64c6 middle top in rwd
5413dd3 burger menu in rwd
b3ad8e9 need to checkout so commit
c50474c content_bottom
aa4d2a4 footer
51e0658 top content
3f88b3d top fix
d25b815 content middle
ab0f489 middle content
453e7a7 content bottom
d9a18e7 content_bottom some style
2e01422 some fix in content_bottom
8f2ebfc icon in input search
640ce6e background and header
3dccc07 file create
267bff0 read me

寫中文也行

171b7e6 修改星星亮半顆
2213e38 新增.gitignore、修改readme.md、刪除.sass-cache資料夾
1281a11 完成切換分頁
be18e6b 完成#produvt
db53deb 完成shopping-detail
2dd9041 完成星星hover效果
cd1ee77 星星使用SVG
d0877f7 放棄星星
2541a80 放棄星星
202d644 完成product圖
b688981 完成price range & 更新read.me
9f10c80 .brand fixed .kinds finished
fd3c84f .brand finished
f4d6f7c #navigation完成
c6d6021 #header完成
5293648 完成#header的購物車圈圈
a80b61c #header未完成
c2a70ee 完成#contact
d5fef61 .html finish
7a362e5 .html unfinish
01bb5e2 .html unfinish
863b0e8 add readme.md

git log 要怎麼寫?才會不糙呢?

git 介紹 commit 指令時的描述

Stores the current contents of the index in a new commit along with a log message from the user describing the changes. [1]

重點是「describing the changes」,也就是對你的 git diff 內容進行抽象描述。

還有一個要知道的事「git 上的每一個 commit 都必須要保持可以運作」
另外,《Git 團隊使用手冊》中有提到「git 視為儲存工作成果,而不是記錄過程進展[2]」

最後,再回想一下命名最重要的,就是要「好猜」,從 git log 可以容易猜中你做了什麼

甚至有建議使用祈使句,(動詞開頭的句子)做為 git log 的建議文法。

來自 AngularJS 的規範[3]

提交的 commit 不是只能寫一行,你知道嗎?使用 git commit 不要使用 git commit -m "" 就知道囉!!
在此只介紹 git commit -m "" 引號內要填寫的內容。欲知詳情,可以看看參考資料

格式

<type>(<scope>): <subject>
<BLANK LINE> 空行
<body>
<BLANK LINE> 空行
<footer>

type

英文 意義
feat (feature) 新增
fix (bug fix) 修正
docs (documentation) 增加文件
style (formatting, missing semi colons, …) 改變程式碼的排版
refactor 重構
test (when adding missing tests) 增加測試(回報狀況)
chore (maintain) 苦功 (含蓋上面全部? 其它)

subject

就是你的描述

example:

  • feat: map view for project location
  • fix: custom field empty in project form

寫得好,除了 debug 有什麼其它的作用?

拿 vue.js 的 2.5.16 版來當例子[4]

其實,它每一個版號都需要寫

  1. 有什麼新的 feature
  2. 解了什麼 bug (並且將解掉的 bug 與 issue tracker 的號碼對上)

然後,可以看看它的 112 commits

可以清楚的看到任何一個變更

  • 什麼時候
  • 誰做的
  • 大概在說什麼。
  • 當時的 CI 是不是有通過 (後面的 勾勾 和 叉叉)

讓發佈產品時,可以吸引別人使用,也可以讓老客戶看見你修改了什麼舊的問題。

參考資料

[1] git commit - Git Docs
[2] 《Git 團隊使用手冊》Ch 5 單人團隊, 寫下明確的記錄訊息 p.95
[3] Commit Message Conventions
[4]: vuejs/vue - Github


上一篇
過度焦慮的 try-catch
下一篇
口耳相傳的建置方式
系列文
可不可以不要寫糙 code30

尚未有邦友留言

立即登入留言