---
# System prepended metadata

title: Git 技術入門(指令筆記)

---

# Git 技術入門(指令筆記)

Git 不但是目前最流行的版本控制系統之一，也是多人開發的必備技能。
雖然目前的學習過程中，都還是單人開發。但掌握好 Git 能更好地組織程式碼的開發流程。
因為指令相當多，在這邊也做個整理，方便學習。


## 為什麼要使用 Git？

Git 是一種分散式版本控制系統，能夠有效地管理程式碼的變更歷史，支援多人協作開發，並且可以輕鬆地與遠端儲存庫（如 GitHub）同步。

### Git 的三個主要區域

1. 工作區（Working Directory）： 您正在進行開發的目錄，包含了所有的原始檔案。
2. 暫存區（Staging Area）： 使用 `git add` 將修改過的檔案加入暫存區，準備提交。
3. 本地儲存庫（Local Repository）： 使用 `git commit` 將暫存區的內容提交到本地儲存庫，形成一個版本快照。

---

### 一、基本操作與狀態查詢

| 指令 | 功能說明 | 
| -------- | -------- | 
| `pwd` | 顯示目前所在的資料夾路徑（present working directory）|
| `ls` | 列出目前資料夾內的檔案與資料夾 |
| `cd` + 資料夾名稱 | 進入指定資料夾 |
| `cd ..` | 回到上一層資料夾     |
| `git status` | 查看目前 Git 狀態（哪些檔案有異動、是否在版本控制中） |
| `git log` | 查看歷史提交紀錄（commit log） |
| `git reflog` | 顯示所有 Git 操作紀錄（包括 reset、checkout 等） |

* git reflog - 顯示所有操作步驟(可搭配 `git reaet` 還原檔案)
若有多筆紀錄 按鍵f 往下 按鍵 b 返回 按鍵 q 離開 `git reflog` 介面

###  二、版本控制流程（從無到有）

| 指令 | 功能說明 | 
| -------- | -------- | 
| `git init` | 初始化一個 Git 儲存庫（建立 `.git` 資料夾）|
| `git add` + 檔案 | 把檔案加進「暫存區」準備提交 |
| `git add .` | 加入所有變動中的檔案 |
| `git commit -m "訊息"` | 提交並寫下本次修改說明，形成一個版本點 |
| `git log --pretty=oneline` | 顯示提交紀錄，每筆只佔一行（更清爽） |


###  三、暫存功能（stash）

| 指令 | 功能說明 | 
| -------- | -------- | 
| `git stash` | 暫時儲存目前修改，不提交 |
| `git stash save "說明"` | 自訂儲存名稱 |
| `git stash list` | 顯示所有暫存列表 |
| `git stash apply` + 數字 | 取出指定的暫存修改（不會刪除） |
| `git stash pop` | 取出最近一筆暫存並刪除 |

###  四、分支管理

| 指令 | 功能說明 | 
| -------- | -------- | 
| `git branch` | 查看所有分支線 |
| `git branch` + 分支名 | 創建新分支線 |
| `git checkout` + 分支名 | 移動到該分支線 |
| `git merge` + 分支名 | 把指定分支合併到當前分支線 |
| `git branch -D` + 分支名 | 刪除該分支線(若位置在該分支線，無法刪除) |
| `git checkout` | 快速在兩個分支線間切換 |

###  五、版本回復與修補

| 指令 | 功能說明 | 
| -------- | -------- | 
| `git restore` + 檔案名 | 還原檔案到最近一次提交的版本 |
| `git reset` + "commit_hash" | 回到某個版本點（後面的歷史還在） |
| `git reset --hard` + "commit_hash" | 回到某個版本點並刪除之後的變動 |
| `git cherry-pick` + "commit_hash" | 把某一次提交單獨挑出來套用到目前分支 |

* git是利用 commit hash 讀取存檔
`git reset` "commit hash" - 讀檔
e.g.
`git reset` 14eeebf346005f5f1f6b394d66d3775c59925395

* `git cherry-pick` "commit hash" - 撿取存檔時間的檔案(若有多個須按先後順序撿取)

###  六、遠端同步（GitHub）

| 指令 | 功能說明 | 
| -------- | -------- | 
| `git remote add origin` + 網址 | 將本地儲存庫與 GitHub 連接 |
| `git push` | 從本地端推送資料到 GitHub |
| `git pull` | 從 GitHub 拉下最新版本 |
| `git clone` + 網址 | 複製整個遠端儲存庫下來 |

---

### .bashrc 快捷指令設定

可以透過設定 .bashrc 來加速日常 Git 操作
設定方法如下：

#### 1. 開啟編輯 .bashrc

```bash
nano ~/.bashrc
```

#### 2. 加入 Git 快捷指令（Alias）

```bash
alias gcm="git checkout main"
alias gb="git branch -vv"
alias gp="git pull"
alias gl="git log --pretty=oneline"
alias gs="git status"
alias gc="git checkout"
```

#### 3. 存檔

按 `Ctrl` + `X`  輸入 `Y`（確認存檔）
按 `Enter`（儲存並離開）

#### 4. 讓設定立即生效

```bash
source ~/.bashrc
```



## 總結

學習 Git 對我來說一開始真的有點困難，指令多又容易搞混。但透過不斷地實際操作、整理資料與撰寫筆記，我發現自己對 Git 的理解越來越清楚。

從初始化版本庫、加入檔案、提交紀錄，到管理分支、與 GitHub 同步，再到使用 stash 暫存工作進度，這些工具都讓我能更有條理地管理專案，也提升了解決問題的能力。

未來我希望能更熟練地運用 Git，並搭配其他工具如 GitHub Flow 或 GitLab 做更進一步的專案管理。