# Git Command

這會列出所有設定過的 remote 名稱及其對應的 URL — 包含 fetch (抓取) 跟 push (推送) 的 URL。  
git remote -v  
顯示 remote 的 fetch/push URL、HEAD branch、remote branches、local-remote 分支對應、追蹤 (tracking) 狀態等  
git remote show origin  
可以直接打開 code .git/config  
git branch 看分支

git restore . 還原 commit

git branch -d 分支名稱

把 GitLab 專案同步下載到本機(local)

git pull

強制推送指令 覆蓋遠端的 dev  
git push --force origin dev

## 📝 Git 常用指令總覽

Git 是目前最流行的分散式版本控制系統。以下為您整理了日常開發中，從專案初始化、基本操作到進階協作最常用的 Git 指令，並附帶簡要說明。

---

### 🚀 一、專案設定與初始化 (Setup &amp; Init)

<table data-path-to-node="4" id="bkmrk-%E6%8C%87%E4%BB%A4-%E8%AA%AA%E6%98%8E-git-config---g"><thead><tr><td>**指令**</td><td>**說明**</td></tr></thead><tbody><tr><td><span data-path-to-node="4,1,0,0">`git config --global user.name "Your Name"`</span></td><td><span data-path-to-node="4,1,1,0">設定全域使用者名稱。</span></td></tr><tr><td><span data-path-to-node="4,2,0,0">`git config --global user.email "email@example.com"`</span></td><td><span data-path-to-node="4,2,1,0">設定全域使用者 Email。</span></td></tr><tr><td><span data-path-to-node="4,3,0,0">`git init`</span></td><td><span data-path-to-node="4,3,1,0">在當前目錄初始化一個新的 Git 倉庫。</span></td></tr><tr><td><span data-path-to-node="4,4,0,0">`git clone <URL>`</span></td><td><span data-path-to-node="4,4,1,0">複製一個遠端倉庫到本地。</span></td></tr></tbody></table>

### 📂 二、基礎工作流程 (Basic Workflow)

這是您日常開發中最常用到的指令。

<table data-path-to-node="7" id="bkmrk-%E6%8C%87%E4%BB%A4-%E8%AA%AA%E6%98%8E-git-status-%E6%AA%A2%E6%9F%A5%E5%B7%A5"><thead><tr><td>**指令**</td><td>**說明**</td></tr></thead><tbody><tr><td><span data-path-to-node="7,1,0,0">`git status`</span></td><td><span data-path-to-node="7,1,1,0">檢查工作目錄和暫存區的狀態（哪些檔案被修改、哪些未追蹤）。</span></td></tr><tr><td><span data-path-to-node="7,2,0,0">`git add <file>`</span></td><td><span data-path-to-node="7,2,1,0">將指定的檔案從工作目錄添加到**暫存區 (Staging Area)**。</span></td></tr><tr><td><span data-path-to-node="7,3,0,0">`git add .`</span></td><td><span data-path-to-node="7,3,1,0">將所有變更過的檔案添加到暫存區。</span></td></tr><tr><td><span data-path-to-node="7,4,0,0">`git commit -m "Commit Message"`</span></td><td><span data-path-to-node="7,4,1,0">將暫存區的內容提交到本地倉庫，並加上描述訊息。</span></td></tr><tr><td><span data-path-to-node="7,5,0,0">`git commit -am "Commit Message"`</span></td><td><span data-path-to-node="7,5,1,0">跳過暫存區，直接將所有已追蹤的修改提交。</span></td></tr><tr><td><span data-path-to-node="7,6,0,0">`git rm <file>`</span></td><td><span data-path-to-node="7,6,1,0">從工作目錄和暫存區中刪除檔案，並記錄刪除操作。</span></td></tr></tbody></table>

### 🕰️ 三、查看歷史記錄與差異 (History &amp; Diffs)

<table data-path-to-node="9" id="bkmrk-%E6%8C%87%E4%BB%A4-%E8%AA%AA%E6%98%8E-git-log-%E6%9F%A5%E7%9C%8B%E5%AE%8C%E6%95%B4%E7%9A%84%E6%8F%90"><thead><tr><td>**指令**</td><td>**說明**</td></tr></thead><tbody><tr><td><span data-path-to-node="9,1,0,0">`git log`</span></td><td><span data-path-to-node="9,1,1,0">查看完整的提交歷史記錄。</span></td></tr><tr><td><span data-path-to-node="9,2,0,0">`git log --oneline`</span></td><td><span data-path-to-node="9,2,1,0">以單行簡潔格式顯示提交歷史。</span></td></tr><tr><td><span data-path-to-node="9,3,0,0">`git diff`</span></td><td><span data-path-to-node="9,3,1,0">比較工作目錄與暫存區之間的差異。</span></td></tr><tr><td><span data-path-to-node="9,4,0,0">`git diff --cached`</span></td><td><span data-path-to-node="9,4,1,0">比較暫存區與最近一次提交之間的差異。</span></td></tr><tr><td><span data-path-to-node="9,5,0,0">`git diff HEAD`</span></td><td><span data-path-to-node="9,5,1,0">比較工作目錄與最近一次提交之間的差異。</span></td></tr></tbody></table>

### 🌳 四、分支操作 (Branching)

分支是 Git 的核心功能，用於隔離開發工作。

<table data-path-to-node="12" id="bkmrk-%E6%8C%87%E4%BB%A4-%E8%AA%AA%E6%98%8E-git-branch-%E5%88%97%E5%87%BA%E6%89%80"><thead><tr><td>**指令**</td><td>**說明**</td></tr></thead><tbody><tr><td><span data-path-to-node="12,1,0,0">`git branch`</span></td><td><span data-path-to-node="12,1,1,0">列出所有本地分支，當前分支前有 `*` 標記。</span></td></tr><tr><td><span data-path-to-node="12,2,0,0">`git branch <new-branch>`</span></td><td><span data-path-to-node="12,2,1,0">建立一個新的本地分支。</span></td></tr><tr><td><span data-path-to-node="12,3,0,0">`git checkout <branch-name>`</span></td><td><span data-path-to-node="12,3,1,0">切換到指定分支。</span></td></tr><tr><td><span data-path-to-node="12,4,0,0">`git checkout -b <new-branch>`</span></td><td><span data-path-to-node="12,4,1,0">**建立並立即切換**到新的本地分支（常用）。</span></td></tr><tr><td><span data-path-to-node="12,5,0,0">`git branch -d <branch-name>`</span></td><td><span data-path-to-node="12,5,1,0">刪除指定的本地分支（該分支必須已合併）。</span></td></tr><tr><td><span data-path-to-node="12,6,0,0">`git merge <branch-name>`</span></td><td><span data-path-to-node="12,6,1,0">將指定分支的內容**合併**到當前分支。</span></td></tr></tbody></table>

### 🔄 五、遠端協作 (Remote &amp; Sync)

用於與 GitLab、GitHub 等遠端倉庫進行互動。

<table data-path-to-node="15" id="bkmrk-%E6%8C%87%E4%BB%A4-%E8%AA%AA%E6%98%8E-git-remote--v-"><thead><tr><td>**指令**</td><td>**說明**</td></tr></thead><tbody><tr><td><span data-path-to-node="15,1,0,0">`git remote -v`</span></td><td><span data-path-to-node="15,1,1,0">查看所有已配置的遠端倉庫名稱及 URL。</span></td></tr><tr><td><span data-path-to-node="15,2,0,0">`git fetch <remote>`</span></td><td><span data-path-to-node="15,2,1,0">從遠端倉庫下載資料，但不自動合併到本地。</span></td></tr><tr><td><span data-path-to-node="15,3,0,0">`git pull`</span></td><td><span data-path-to-node="15,3,1,0">下載並自動合併遠端分支的內容到當前本地分支（相當於 `git fetch` + `git merge`）。</span></td></tr><tr><td><span data-path-to-node="15,4,0,0">`git push <remote> <branch>`</span></td><td><span data-path-to-node="15,4,1,0">將本地分支的提交推送到遠端倉庫。</span></td></tr><tr><td><span data-path-to-node="15,5,0,0">`git push -u origin <branch>`</span></td><td><span data-path-to-node="15,5,1,0">首次推送時設定本地分支追蹤遠端分支。</span></td></tr></tbody></table>

### ↩️ 六、還原與撤銷操作 (Undoing Changes)

Git 讓您可以安全地撤銷錯誤操作。

<table data-path-to-node="18" id="bkmrk-%E6%8C%87%E4%BB%A4-%E8%AA%AA%E6%98%8E-git-reset-head"><thead><tr><td>**指令**</td><td>**說明**</td></tr></thead><tbody><tr><td><span data-path-to-node="18,1,0,0">`git reset HEAD <file>`</span></td><td><span data-path-to-node="18,1,1,0">取消暫存區中指定檔案的變更（將檔案從暫存區移回工作目錄）。</span></td></tr><tr><td><span data-path-to-node="18,2,0,0">`git checkout -- <file>`</span></td><td><span data-path-to-node="18,2,1,0">捨棄工作目錄中指定檔案的**未暫存**修改（回到最近一次提交或暫存的狀態）。</span></td></tr><tr><td><span data-path-to-node="18,3,0,0">`git revert <commit-hash>`</span></td><td><span data-path-to-node="18,3,1,0">創建一個新的提交，來撤銷指定提交所做的更改（保留歷史記錄）。</span></td></tr><tr><td><span data-path-to-node="18,4,0,0">`git reset --hard <commit-hash>`</span></td><td><span data-path-to-node="18,4,1,0">**危險操作！** 永久丟棄當前分支後續的所有提交，將 HEAD 指向指定提交。</span></td></tr><tr><td><span data-path-to-node="18,5,0,0">`git stash`</span></td><td><span data-path-to-node="18,5,1,0">暫存當前工作目錄的變更，讓工作目錄回到乾淨狀態，方便切換分支。</span></td></tr><tr><td><span data-path-to-node="18,6,0,0">`git stash pop`</span></td><td><span data-path-to-node="18,6,1,0">重新應用最近一次暫存的變更。</span></td></tr></tbody></table>