版本控制
What?
版本控制(Version Control)是一套系統和流程,用於追蹤和管理文件(特別是程式碼)的更改歷史。版本控制系統(VCS)記錄每次修改的內容、時間、作者和原因,允許開發者回滾到任何歷史版本。Git 是目前最流行的分散式版本控制系統(Distributed VCS)。
版本控制的核心是 Repository(倉庫),存儲所有文件的完整歷史。每次修改都作為一個 Commit(提交)被記錄,包含一個唯一的哈希值和提交訊息。在團隊開發中,版本控制允許多人同時工作於不同特性,然後通過 Merge(合併)整合代碼。
版本控制不僅追蹤代碼,還支持 Branching(分支)、Tagging(標籤)等高級功能,使得複雜的軟體開發流程成為可能。
Who?
- 軟體開發人員和工程師
- DevOps 工程師和系統管理員
- 數據科學家和機器學習工程師
- 任何協作開發項目的參與者
When?
- 初始化新項目時建立 Repository
- 完成功能開發後進行 Commit 保存代碼
- 並行開發多個功能時使用 Branch
- 準備發布時創建 Release 標籤
Where?
- 本地開發環境中的 .git 目錄
- 遠程倉庫服務(GitHub、GitLab、Bitbucket)
- CI/CD Pipeline 中的代碼拉取和部署階段
- Code Review 和 Pull Request 流程
Why?
- 代碼安全:保留完整的歷史記錄,任何時刻都可恢復
- 團隊協作:多人可同時工作而不互相覆蓋
- 追蹤變更:清晰記錄誰在何時做了什麼改動
- 實現 CI/CD:自動化測試和部署基於版本控制的事件
How?
🛠️ 建立階段
# 初始化本地倉庫
git init my-project
cd my-project
# 或克隆遠程倉庫
git clone https://github.com/username/repo.git
# 配置用戶資訊(首次使用)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# 創建文件並暫存
echo "print('Hello')" > main.py
git add main.py
# 創建首個提交
git commit -m "初始提交:添加 main.py"
# 創建分支進行新功能開發
git checkout -b feature/new-feature
# 進行修改和提交
echo "print('Feature')" >> main.py
git add main.py
git commit -m "特性:實現新功能"
# 推送到遠程倉庫
git push -u origin feature/new-feature
🔍 查詢階段
# 查看提交歷史
git log --oneline -10 # 顯示最近 10 個提交
git log --graph --all # 視覺化分支結構
# 查看當前狀態
git status # 查看工作目錄狀態
git diff # 查看未暫存的改動
git diff --cached # 查看已暫存的改動
# 查看特定提交
git show <commit-hash> # 查看提交詳細內容
# 比較分支
git diff main feature/new # 比較兩個分支的差異
# 查看誰修改了什麼
git blame main.py # 查看每行代碼的最後修改者
# 搜尋提交
git log -S "keyword" # 查找包含特定內容的提交
# 撤銷操作
git revert <commit-hash> # 撤銷特定提交(創建新提交)
git reset --soft HEAD~1 # 撤銷最後一次提交但保留更改
補充說明
📌 範例比較
| 特性 | Git | SVN | Mercurial |
|---|---|---|---|
| 類型 | 分散式 | 集中式 | 分散式 |
| 性能 | 快速 | 較慢 | 中等 |
| 學習曲線 | 陡峭 | 緩和 | 中等 |
| 市場佔有 | 主導 | 過時 | 小眾 |
🧠 延伸/常見誤解
- 誤解:Git 只用於代碼管理。實際上,Git 可用於管理任何文本文件,如文檔、配置和數據。
- 延伸:Git Workflow(如 Git Flow 和 GitHub Flow)提供了規範的分支管理策略,大型團隊應採用統一的工作流以提高協作效率。