開發基礎補完計劃:Git 的意義和使用方法

用最生活化的比喻,徹底搞懂版本控制的本質——寫程式必學,量化交易開發絕對用得到

2026年2月23日
閱讀時間 15 分鐘
江景哲

1. 為什麼每個開發者都需要 Git?

先問你一個問題:你有沒有做過這樣的事情?

如果你有以上任何一種經歷,那你就已經遇到了版本控制問題。而 Git 就是解決這些問題的標準答案。

在量化交易開發中,Git 更是不可缺少:

2. Git 是什麼?版本控制的本質

2.1 版本控制的比喻

📸

生活比喻:遊戲存檔

你玩 RPG 遊戲時,每過一個關卡都會存檔。

Git 就是你寫程式時的「存檔系統」。每次你覺得代碼到了一個穩定狀態,就可以「存一個檔」(commit)。之後無論改了什麼,隨時都能回到任何一個歷史存檔,不怕改壞。

2.2 Git 的誕生背景

Git 由 Linus Torvalds(Linux 操作系統之父)在 2005 年創造,最初是為了管理 Linux 內核的龐大代碼庫。

Git 是一個分佈式版本控制系統(DVCS),這意味著:

特性 說明
本地完整倉庫 每個人的電腦上都有完整的版本歷史,不依賴服務器
離線可用 沒有網路也能提交、查歷史、建分支
速度極快 本地操作不需要網路請求,幾乎是即時
不易丟失 每個人都有完整備份,即使服務器掛掉也沒事

3. 安裝與初始設定

3.1 安裝 Git

macOS:

# 方法1:使用 Homebrew(推薦)
brew install git

# 方法2:安裝 Xcode Command Line Tools
xcode-select --install

Windows:

# 前往官網下載安裝包
# https://git-scm.com/download/win
# 安裝後在 Git Bash 中執行命令

Ubuntu / Debian Linux:

sudo apt update
sudo apt install git

3.2 驗證安裝

git --version
# 輸出:git version 2.43.0

3.3 初始設定(每台電腦只需做一次)

告訴 Git 你是誰,這樣每次提交記錄都會帶上你的名字:

# 設定使用者名稱和 Email
git config --global user.name "你的名字"
git config --global user.email "your@email.com"

# 設定預設編輯器(選用 VS Code)
git config --global core.editor "code --wait"

# 查看目前設定
git config --list
💡 --global 是什麼意思?

--global 代表這台電腦上所有 Git 倉庫都使用這個設定。
如果某個項目需要不同的 Email(例如公司項目),可以在該項目目錄下執行相同命令但不加 --global,會覆蓋全域設定。

4. 三個區域:工作區、暫存區、版本庫

這是理解 Git 最重要的概念。Git 把你的項目分成三個「區域」:

🏗️

生活比喻:裝貨打包

想像你要寄一個包裹:

🗂️ 工作區(Working Directory) = 你的桌面,你在這裡修改文件
📦 暫存區(Staging Area) = 打包箱,你把要寄的東西放進去
🏛️ 版本庫(Repository) = 倉庫記錄,每次寄出去的快照都永久保存在這裡

三個區域的關係如下:

區域 說明 對應命令
工作區 你實際編輯的文件,磁碟上看得到的內容 —(直接修改文件)
暫存區 準備提交的文件清單,是一個中間緩衝層 git add
版本庫 保存所有歷史版本快照,存在 .git 目錄中 git commit
💡 為什麼需要暫存區?

有時候你改了 5 個文件,但只想把其中 3 個打包成一次提交。暫存區讓你精細控制「這次 commit 包含哪些改動」,使每次提交的目的更清晰。

5. 核心命令速查

5.1 初始化倉庫

# 在當前目錄初始化一個新的 Git 倉庫
git init

# 克隆(複製)一個已有的遠端倉庫到本地
git clone https://github.com/username/repo.git

5.2 查看狀態與歷史

# 查看工作區和暫存區的狀態(最常用)
git status

# 查看提交歷史(按 q 退出)
git log

# 簡潔版提交歷史(一行一個)
git log --oneline

# 查看具體改了什麼內容
git diff

5.3 暫存與提交

# 把某個文件加入暫存區
git add strategy.py

# 把所有改動文件一次加入暫存區
git add .

# 提交暫存區的內容,並附上說明訊息
git commit -m "新增雙均線策略"

# 一步完成:add + commit(只對已追蹤文件有效)
git commit -am "修復計算邏輯錯誤"
⚠️ 好的 commit 訊息很重要!
  • ❌ 不好的訊息:"fix""update""asdfjkl"
  • ✅ 好的訊息:"修復 SPY 策略在除息日的錯誤計算"
  • 好的訊息讓你半年後看歷史記錄也能快速理解

5.4 撤銷與回退

# 取消某個文件的暫存(從暫存區移出,不影響工作區)
git restore --staged strategy.py

# 丟棄工作區的修改(恢復到上一次 commit 的狀態)
git restore strategy.py

# 回退到某個歷史版本(commit hash 從 git log 取得)
git reset --hard a1b2c3d

# 安全地撤銷某次 commit(會建立一個新的反向 commit)
git revert a1b2c3d
⚠️ git reset --hard 是危險操作!

--hard 會直接丟棄工作區和暫存區所有未提交的改動,無法還原。在已推送到遠端的代碼上使用更要謹慎。不確定時優先用 git revert

5.5 忽略文件:.gitignore

有些文件不應該被 Git 追蹤,例如 API 金鑰、密碼、虛擬環境、編譯產物等。在項目根目錄建立 .gitignore 文件:

# .gitignore 範例(量化交易項目)

# Python 虛擬環境
venv/
.venv/
__pycache__/
*.pyc

# 環境變數與 API 金鑰(絕對不能上傳!)
.env
config_secret.py
api_keys.json

# 回測結果和數據文件(太大了)
data/
results/
*.csv
*.parquet

# 系統文件
.DS_Store       # macOS
Thumbs.db       # Windows
💡 敏感信息保護最重要!

交易所 API Key、長橋 access token 等敏感信息一旦上傳到 GitHub,即使後來刪除,也可能已被惡意程序掃描記錄。務必在 .gitignore 中排除所有包含密鑰的文件。

6. 分支:並行開發的神器

6.1 什麼是分支?

🌿

生活比喻:平行宇宙

分支就像代碼的平行宇宙。你可以在不影響主線(main)穩定版本的情況下,在另一條分支上自由實驗新功能。實驗成功了再「合並」回主線;失敗了直接刪掉分支,主線毫髮無損。

6.2 分支基本操作

# 查看所有分支(* 號表示當前所在分支)
git branch

# 建立新分支
git branch feature/rsi-strategy

# 切換到該分支
git checkout feature/rsi-strategy

# 建立並立即切換(上面兩步合一)
git checkout -b feature/rsi-strategy

# 現代寫法(Git 2.23+ 推薦)
git switch -c feature/rsi-strategy

6.3 合并分支

# 先切回主分支
git switch main

# 將 feature 分支合并進來
git merge feature/rsi-strategy

# 合并完成後,刪除 feature 分支(可選)
git branch -d feature/rsi-strategy

6.4 常見分支工作流

對於量化交易個人項目,推薦以下簡單分支策略:

分支名 用途 說明
main 主分支 只放穩定、經過驗證的代碼,可部署到服務器
dev 開發分支 日常開發整合,功能開發完成後合并到 main
feature/xxx 功能分支 開發某個新策略或新功能,完成後合并到 dev
hotfix/xxx 緊急修復 線上出 bug,從 main 切出來修復後合并回 main

7. GitHub 遠端倉庫:備份與協作

7.1 本地倉庫 vs 遠端倉庫

☁️

比喻:本機 vs 雲端

你電腦上的 Git 倉庫就像本地硬盤的文件。
GitHub 上的倉庫就像雲端備份(Google Drive、iCloud)。

兩者完全獨立,你需要主動「推送」(push)才同步到雲端,主動「拉取」(pull)才把雲端更新拉到本地。

7.2 建立 GitHub 倉庫並推送

# 第1步:在 GitHub.com 建立一個新的 Repository(空的)

# 第2步:在本地關聯遠端倉庫
git remote add origin https://github.com/yourname/your-repo.git

# 第3步:首次推送並設置追蹤關係
git push -u origin main

# 之後每次推送只需要
git push

7.3 拉取遠端更新

# 從遠端拉取最新代碼並自動合并
git pull

# 拆成兩步(更安全,可以先查看再決定是否合并)
git fetch origin       # 只下載,不合并
git merge origin/main  # 再手動合并

7.4 常用遠端操作命令

# 查看已設定的遠端倉庫
git remote -v

# 修改遠端 URL(例如從 HTTPS 改成 SSH)
git remote set-url origin git@github.com:yourname/your-repo.git

# 刪除某個遠端
git remote remove origin
💡 HTTPS vs SSH 連接方式
  • HTTPS:設定簡單,但每次 push 可能需要輸入密碼(可用憑證管理器解決)
  • SSH:設定 SSH Key 後無需每次輸入密碼,推薦長期使用

8. 在量化交易開發中的 Git 實踐

8.1 量化項目的典型 Git 目錄結構

my-quant-strategy/
├── .git/                  # Git 版本庫(自動生成,不要手動修改)
├── .gitignore             # 排除敏感文件和大型數據
├── README.md              # 項目說明
├── requirements.txt       # Python 依賴清單
├── strategy/
│   ├── dual_sma.py        # 雙均線策略
│   └── rsi_mean_revert.py # RSI 均值回復策略
├── backtest/
│   └── run_backtest.py    # 回測入口
└── config/
    ├── config_template.py # 配置模板(提交到 Git)
    └── config.py          # 本地配置(在 .gitignore 中排除)

8.2 規範化 commit 工作流程

# 典型的一天工作流

# 早上拉取最新代碼
git pull

# 建立新功能分支
git switch -c feature/add-rsi-filter

# ...寫程式,測試...

# 查看改了什麼
git status
git diff strategy/dual_sma.py

# 把改動加入暫存區
git add strategy/dual_sma.py

# 提交(訊息清楚說明做了什麼)
git commit -m "feat: 雙均線策略新增 RSI 過濾器,避開超買區域入場"

# 推送到遠端
git push origin feature/add-rsi-filter

# 功能驗證後,合并到 dev
git switch dev
git merge feature/add-rsi-filter
git push

8.3 用 Git 管理回測版本

# 每次調整策略參數後建立 tag,方便對比回測結果
git tag -a v1.0 -m "雙均線 SMA(20,50),回測夏普 1.23"
git tag -a v1.1 -m "加入 RSI 過濾後,夏普提升至 1.45"

# 查看所有版本標籤
git tag

# 切回某個版本重新運行回測
git checkout v1.0

8.4 部署到雲服務器

# SSH 登入到雲服務器
ssh root@your-server-ip

# 如果是首次部署,克隆倉庫
git clone https://github.com/yourname/your-repo.git
cd your-repo

# 如果已部署,拉取最新代碼
git pull origin main

# 重新啟動策略進程
python strategy/main.py &
🎉 總結:Git 核心概念一覽
  • 版本控制:記錄代碼每次變化,隨時可回退
  • 三個區域:工作區 → git add → 暫存區 → git commit → 版本庫
  • 分支:平行開發,不影響主線穩定性
  • 遠端倉庫git push 備份到 GitHub,git pull 拉取更新
  • .gitignore:敏感信息(API Key)絕對不能上傳!

掌握 Git 是每個量化交易開發者的必備技能。從今天起,把你的策略代碼交給 Git 管理,讓版本歷史為你的開發保駕護航!

江景哲

江景哲

Zero2Quant 課程講師 · 全職量化交易者

想要更系統地學習量化交易?

10節實戰課程,從零基礎到自動化交易系統

了解完整課程 →