ELI5 · GitHub

milestone 是什麼?

一班有起飛時間的飛機。單子想搭,就得在起飛前做完。

✈️
它是唯一「有期限」的分類方式

標籤說這是什麼、父子說由什麼組成,都跟時間無關。
只有 milestone 回答「什麼時候之前要交」。

它長這樣

v1.0
起飛時間3 月 15 日
第一個能給別人用的版本
8 張做完 · 還剩 4 張 67% 這條 GitHub 自己算

有自己的網址、自己的開關狀態、自己的統計
不是寫在單子裡的一串字,是一個真的存在的東西,單子只是指向它。

把單子放進去 = 讓它登機

#21
登入頁
#22
接 API
#23
寫測試
#24
改文件
v1.0 3/15 起飛

每關掉一張,進度條自己往前走
你不用手動數還剩幾張。

一張單子只能搭一班

這是它跟標籤最大的差別。
在資料裡,標籤是一個清單,milestone 是一個格子——格子只裝得下一個。

✓ 可以
#23
寫測試
v1.0
✗ 不行
#23
寫測試
v1.0
v1.1

沒趕上飛機怎麼辦?

這是實務上最常發生的事,而且完全正常。
做法叫「改簽」:把沒做完的單子搬到下一班。

v1.0
3/15 已起飛 · 關閉
#21
登入頁
#22
接 API
關閉 milestone 不會關掉裡面的單子。 它只是把這個箱子收起來、不再出現在選單裡。 沒做完的單子還是開著的,你要自己決定把它們搬去哪一班。

放回四種分類方式裡看

🏷️
label

這是什麼性質的事?

🧩
sub-issue

這件大事由哪幾件小事組成?

✈️
milestone

什麼時候之前要交?

📋
Projects

現在做到哪個階段了?

四個裡面只有 milestone 綁時間。 如果你發現自己想用標籤表達「這個要在三月前做完」,那就是該用 milestone 的訊號。

一個會讓你找不到指令的雷

✗ gh 沒有 milestone 這個指令

人家實際試過,打 gh milestone 會回 unknown command "milestone" for "gh"。 指令清單裡有 issueprproject就是沒有 milestone

所以建立一個 milestone 只能去網頁點,或直接打 API。 但把單子放進去有方便指令可用——下面那些都行。

指令

建立要用 API,指派可以用方便指令:

gh api repos/{owner}/{repo}/milestones -f title="v1.0" -f due_on="2026-03-15T00:00:00Z"
gh api repos/{owner}/{repo}/milestones     # 看目前有哪些
gh issue create --title "寫測試" --milestone "v1.0"
gh issue edit 23 --milestone "v1.1"        # 改簽到下一班
gh issue edit 23 --remove-milestone        # 拿下來
gh issue list --milestone "v1.0"           # 這班飛機上有誰
指令裡的 {owner}/{repo} 不用自己填, 在 repo 目錄底下 gh 會自動換成你的

想再深入一點