全部速查表版本控制

git

Git 2.30+

日常高頻 Git 命令快速參考:init、clone、branch、merge、rebase、reset、stash、遠端操作、歷史查詢,並附帶常用參數與實作範例。

31 條命令

入門

git init

在當前目錄建立一個新的 Git 倉庫。

git init my-project
git clone <url>

將遠端倉庫複製到本地,包含完整歷史記錄。

--depth 1 淺克隆(只含最新提交);-b <branch> 克隆指定分支

git clone -b main --depth 1 https://github.com/user/repo.git
git config

設定使用者名稱、電郵等配置;--global 對所有倉庫生效。

git config --global user.name "Your Name" && git config --global user.email "[email protected]"

日常操作

git status

檢視工作區狀態:已修改、已暫存、未追蹤的檔案。

-s 簡短格式;-b 顯示分支資訊

git status -sb
git add <file>

將檔案變更加入暫存區,為下一次提交做準備。

-A 暫存所有變更;-p 互動挑選區塊;-u 僅暫存已被追蹤的檔案

git add -p src/index.ts
git commit

將暫存的變更記錄為一次提交。

-m 提交訊息;-a 暫存被追蹤檔案並提交;--amend 改寫上一次提交

git commit -am "fix: 處理空輸入"
git diff

顯示工作區、暫存區、各提交之間的行級差異。

--staged 與上次提交的差異;<branch> 與某分支的差異;--stat 只顯示摘要

git diff --staged --stat
git restore <file>

捨棄工作區未提交的修改(加 --staged 可取消暫存)。

git restore --staged src/index.ts

分支

git branch

列出、建立或刪除分支。

-d 刪除;-D 強制刪除;-m 重新命名;-a 同時列出遠端分支

git branch -m old-name new-name
git switch <branch>

切換到其他分支;-c 會先建立分支再切換(取代舊的 checkout)。

git switch -c feature/login
git merge <branch>

將其他分支合併到當前分支。

--no-ff 總是產生合併提交;--abort 取消正在進行的合併

git merge --no-ff feature/login
git rebase <branch>

將當前分支的提交「重播」到另一個分支頂端,得到線性歷史。

-i 互動式(合併/改寫/重排);--abort 取消;--continue 解決後繼續

git rebase -i HEAD~3

遠端

git remote -v

列出已設定的遠端倉庫及其網址。

git remote add origin https://github.com/user/repo.git
git fetch

從遠端下載物件與參考,但不自動合併。

--prune 刪除過時的遠端追蹤分支;--all 取得所有遠端

git fetch --prune origin
git pull

從遠端取得並合併(或 rebase)到當前分支。

--rebase 改用 rebase;--ff-only 僅快進合併

git pull --rebase origin main
git push

將本地提交推送到遠端倉庫。

-u 設定上游追蹤;--force-with-lease 更安全的強推;--tags 推送標籤

git push -u origin feature/login

還原與修復

git reset

把 HEAD 移到其他提交,可選擇同時修改暫存區與工作區。

--soft 保留變更在暫存區;--mixed(預設)保留在工作區;--hard 捨棄所有變更

git reset --hard HEAD~1
git revert <commit>

產生新提交來還原之前的某次提交,對共享歷史而言是安全的。

git revert HEAD
git commit --amend

改寫最近一次提交:補上漏掉的檔案或修改提交訊息。

--no-edit 保留原提交訊息

git commit --amend --no-edit
git clean

刪除工作區中未追蹤的檔案。

-n 預覽;-f 強制;-d 包含目錄;-x 包含被忽略的檔案

git clean -ndx

歷史與查看

git log

顯示提交歷史。

--oneline 每條一行;--graph 分支圖;-p 顯示差異;-n 限制筆數

git log --oneline --graph -15
git show <commit>

顯示某次提交的說明與差異;也可用於標籤或檔案(git show HEAD:file)。

git show HEAD~2 --stat
git blame <file>

逐行列出該行最後修改者與對應提交。

-L n,m 僅顯示指定行範圍

git blame -L 10,20 src/index.ts
git reflog

顯示 HEAD 的移動歷史——可在 reset/rebase 出錯時找回「遺失」的提交。

git reflog -20

暫存

git stash

暫時擱置未提交的修改,讓工作區恢復乾淨。

-u 包含未追蹤檔案;push -m 說明;list 列出所有 stash

git stash push -u -m "wip: 登入表單"
git stash pop

還原最近的 stash 並從 stash 列表移除。

apply 還原但保留 stash 條目

git stash apply stash@{1}

標籤與發佈

git tag

列出、建立或刪除標示發佈點的標籤。

-a 註解標籤;-m 說明;-d 刪除

git tag -a v1.2.0 -m "Release 1.2.0"
git describe --tags

顯示當前提交可達的最近標籤及距離。

git describe --tags --always

進階

git cherry-pick <commit>

將指定提交的變更套用到當前分支。

-n 套用但不提交;-x 在提交訊息中附加來源提交哈希

git cherry-pick -x a1b2c3d
git bisect

用二分搜尋找出引入 bug 的提交。

start / bad / good / run <cmd> / reset

git bisect start && git bisect bad && git bisect good v1.0.0
git worktree add <path> <branch>

在同一個倉庫下,於獨立目錄簽出其他分支。

git worktree add ../hotfix hotfix/urgent-bug

相關命令速查

關於 Git

Git 係由 Linus Torvalds 喺 2005 年 4 月因 BitKeeper 嘅授權爭議而建立嘅免費開源分散式版本控制系統,本來係用嚟管理 Linux 內核嘅源碼樹。每個工作目錄都係一份完整嘅儲存庫,提交、分支、合併都喺本地完成,直到 `git push` 至先會上傳到伺服器——呢個就係 Git 又快又能畀成千上萬個開發者離線協作嘅原因。當前穩定版係 Git 2.40+。Git 用內容定址檔案系統(SHA-1,未來轉用 SHA-256)儲存物件:`commit`、`tree`、`blob`、`tag`;仲支援以 index 做暫存區、廉價分支、rebase、二分搜尋(bisect)、子模組、worktree、GPG/SSH 簽名提交等特性。佢已經成為源碼管理嘅業界標準,畀開源項目同大型企業一齊廣泛採用。任何需要歷史、分支或協作嘅場景都應該用佢;發 PR 之前用 `git rebase -i` 整理提交紀錄,搵返「唔見咗」嘅工作就靠 `git reflog`。Git 唔會上傳你冇提交過嘅內容,但會忠實保留你提交過嘅——推送去公開儲存庫之前,用 `git filter-repo` 清理敏感資料。

速查頁版本 1.0.0