---
title: "03 - 基本工作流程"
type: note
specialty: Programming
tags: [git-github, 03-基本工作流程]
---

# 03 - 基本工作流程

← [[02-安裝與初始設定]] | 下一篇 → [[04-GitHub入門]]

---

## 🗂️ 初始化一個新的 Git 倉庫

在你想要追蹤的資料夾裡，執行：

```bash
# 先切換到你的專案資料夾
cd /path/to/your/project

# 初始化 Git（只需做一次）
git init
```

這個指令會在資料夾裡建立一個隱藏的 `.git` 資料夾，Git 的所有資料都存在這裡。

---

## 📋 查看目前狀態

```bash
git status
```

這是你最常用的指令之一，隨時可以執行，了解目前的狀態。

### 常見的狀態訊息

```
On branch main           ← 目前在 main 分支

Untracked files:         ← 新增的檔案，Git 還不知道
  notes.md

Changes not staged:      ← 有修改但還沒 add 到暫存區
  modified: old_note.md

Changes to be committed: ← 已 add，等待 commit
  new file: notes.md
```

---

## ➕ 加入暫存區（git add）

在 commit 之前，要先決定「這次要一起存哪些檔案」。

```bash
# 加入單一檔案
git add filename.md

# 加入資料夾內的所有檔案
git add folder/

# 加入目前資料夾的所有變更
git add .

# 互動式選擇（進階）
git add -p
```

> [!tip] **暫存區（Staging Area）的用途**
> 讓你可以把「一大堆修改」拆成有意義的幾個 commit，
> 例如：先 commit 修 bug 的部分，再 commit 新功能的部分。

---

## 💾 提交（git commit）

```bash
# commit 並附上說明訊息（-m = message）
git commit -m "這次修改的說明"
```

### 好的 commit message 怎麼寫？

| ❌ 不好的例子 | ✅ 好的例子 |
|-------------|-----------|
| `update` | `新增 heart failure 的診斷標準` |
| `fix` | `修正 sepsis 抗生素選擇的錯誤` |
| `aaa` | `補充 DKA 的 management 流程` |

### 常用格式（Conventional Commits）

```
feat: 新增某功能
fix: 修正某問題
docs: 更新文件
update: 更新現有內容
```

---

## 📜 查看歷史紀錄（git log）

```bash
# 完整的 log
git log

# 每個 commit 只顯示一行
git log --oneline

# 圖形化顯示分支
git log --oneline --graph --all
```

輸出範例（`--oneline`）：

```
a3f1b2c 補充 DKA 治療流程
9e2d4a1 新增 heart failure 筆記
b7c8f3e 初始化筆記資料夾
```

每行開頭的 7 位字元（如 `a3f1b2c`）是 **commit hash**，可以用來回到該版本。

---

## ↩️ 回到過去的版本

```bash
# 查看某個 commit 的內容（不會修改現在的狀態）
git show a3f1b2c

# 暫時切換到某個舊版本（detached HEAD 狀態）
git checkout a3f1b2c

# 回到最新版本
git checkout main
```

### 撤銷修改

```bash
# 撤銷工作區的修改（還沒 add 的）
git restore filename.md

# 把已 add 的檔案移出暫存區（但保留修改）
git restore --staged filename.md

# 回到某個 commit 的狀態（危險！會丟失後面的 commit）
git reset --hard a3f1b2c
```

---

## 🙈 忽略不想追蹤的檔案（.gitignore）

建立一個 `.gitignore` 檔案，裡面列出不想讓 Git 追蹤的檔案：

```bash
# 建立 .gitignore 檔案
touch .gitignore
```

`.gitignore` 範例內容：

```
# 系統檔案
.DS_Store
Thumbs.db

# 編輯器設定
.obsidian/workspace.json
.obsidian/cache

# 敏感資料
.env
secrets.txt

# 暫存資料夾
tmp/
```

---

## 🔄 完整的日常工作流程

```
1. 修改檔案
   ↓
2. git status     ← 確認哪些檔案有變動
   ↓
3. git add .      ← 把想存的檔案加到暫存區
   ↓
4. git commit -m "說明這次修改了什麼"   ← 存一個版本快照
   ↓
5. git push       ← 推到 GitHub（見下一章）
```

---

## 📌 小結

| 指令 | 用途 |
|------|------|
| `git init` | 初始化新 repo |
| `git status` | 查看目前狀態 |
| `git add .` | 加入所有變更到暫存區 |
| `git commit -m "訊息"` | 建立一個版本快照 |
| `git log --oneline` | 查看歷史紀錄 |
| `git restore 檔案` | 撤銷工作區修改 |

---

← [[02-安裝與初始設定]] | 下一篇 → [[04-GitHub入門]]
