今日目標
• 理解 Git Rebase 與 Merge 的差異
• 學習整理提交歷史的技巧
• 掌握 Interactive Rebase 進階操作
• 建立專業的程式碼提交習慣
為什麼需要 Git Rebase?
職場真實情況:
你的提交歷史:
A → B → C → 修復錯字 → 再修復錯字 → 修正縮排 → 完成功能
主管看到:「這提交歷史好亂...」
↓
用 Rebase 整理:
A → B → C → 完成功能
主管:「很乾淨專業的提交歷史!」
Rebase vs Merge 比較:
Merge(合併):
main: A---B---C-------F
\ /
feature: D---E
• 保留完整歷史
• 會產生合併節點
• 歷史比較複雜
Rebase(重新定基):
main: A---B---C---D'---E'
• 線性歷史
• 看起來更乾淨
• 專業感更強
操作步驟
步驟1:建立練習環境
cd company-website
git checkout main
git pull origin main
git checkout -b feature/news-section
git log --oneline -3
步驟2:建立新聞區塊功能(故意做多個小提交)
建立 news.html:
<h1>最新消息</h1>
.news-item {
border-bottom: 1px solid #eee;
padding: 20px 0;
}
.news-date {
color: #666;
font-size: 0.9em;
}
第三次提交:
git add css/css_style.css
git commit -m "add news styles"
修正樣式(故意的小修改):
/* 修改 .news-container /
.news-container {
max-width: 800px;
margin: 30px auto;
padding: 0 20px; / 新增這行 */
}
第四次提交:
git add css/css_style.css
git commit -m "fix news container padding"
加入更多新聞:
Git Rebase 實戰操作
步驟4:使用 Interactive Rebase 整理歷史
指令詳解:
git rebase -i HEAD~5
├── git rebase # Git 的 rebase 功能
├── -i # interactive(互動式)
├── HEAD # 目前分支的最新提交
└── ~5 # 往前數 5 個提交
執行 rebase:
git rebase -i HEAD~5
在編輯器中修改(將小修改合併):
pick q4r5s6t add news page structure
pick m1n2o3p add news list
pick i7j8k9l add news styles
squash e4f5g6h fix news container padding
pick a1b2c3d add more news items
儲存並關閉編輯器
接下來會要求輸入合併後的提交訊息:
feat: add news page styles with proper container layout
步驟5:檢查整理後的歷史
git log --oneline
步驟6:與 main 分支同步(Rebase onto main)
git checkout main
git pull origin main
git checkout feature/news-section
git rebase main
步驟7:推送整理後的分支
git push origin feature/news-section
Rebase 進階技巧
常用的 Interactive Rebase 指令:
pick = 保留提交
squash = 合併到前一個提交(保留訊息)
fixup = 合併到前一個提交(丟棄訊息)
edit = 暫停讓你修改提交
drop = 刪除提交
reword = 修改提交訊息
實用範例:
git rebase -i HEAD~1
git rebase -i HEAD~3
git rebase -i HEAD~5 # 然後將要刪除的改為 drop
注意事項與最佳實踐
⚠️ Rebase 使用時機:
✅ 適合使用:
❌ 避免使用:
git rebase -i HEAD~5
git rebase main
git push origin feature/branch-name
完整工作流程範例
步驟8:完成新聞功能並提交 PR
git log --oneline
git status
git push origin feature/news-section
echo "在 GitHub 建立 PR:"
echo "標題:feat: 新增最新消息頁面"
echo "說明:完整的新聞展示功能,包含響應式設計"
今日重點回顧
• ✅ 理解 Rebase 與 Merge 的差異
• ✅ 學會使用 Interactive Rebase 整理歷史
• ✅ 掌握提交訊息的合併技巧
• ✅ 建立乾淨專業的提交習慣
核心指令總結
git rebase -i HEAD~n # 互動式重新定基最近 n 個提交
git rebase main # 將當前分支重新定基到 main
git rebase --continue # 解決衝突後繼續
git rebase --abort # 取消 rebase 操作
明天預告
Day 11 - Git Tag 版本標記:學會為重要版本打標籤,建立專業的版本管理!
🎉 恭喜完成 Day 10!現在你能建立專業乾淨的提交歷史了!