cover

常用的 Git 指令:初學者必備的基本操作指南

Git 是現代軟體開發中不可或缺的版本控制工具。不管你是一個人默默寫 code,還是跟一群人一起協作,Git 都能幫你有效地管理程式碼版本、追蹤變更。如果你還不知道為什麼要用 Git,可以先看看 為什麼要用 Git

這篇文章會帶你走過 Git 最常用的基本指令,學完這些你就可以開始用 Git 管理你的專案了!

flowchart LR
    A[Working Directory<br/>工作目錄] -->|git add| B[Staging Area<br/>暫存區]
    B -->|git commit| C[Local Repo<br/>本地倉庫]
    C -->|git push| D[Remote Repo<br/>遠端倉庫]
    D -->|git pull| A
    D -->|git fetch| C
    C -->|git checkout| A

上面這張圖是 Git 的核心工作流程。看起來很多箭頭,對吧?別擔心,我們一個一個來。


初始化一個新的 Git 倉庫

當你需要在本地建立一個新的 Git 倉庫時,用這個指令來初始化:

git init

這會在你的專案資料夾中創建一個 .git 目錄,Git 會在這裡跟蹤你的所有版本控制記錄。這是開始使用 Git 的第一步,記得在正確的資料夾裡執行這個命令。


將檔案添加到 Git 中

當你修改或新增檔案後,你需要先把這些變更加到 Git 的暫存區,這樣才能準備提交。想像一下暫存區就像是一個「待出貨的箱子」,你要把東西先放進去,才能一次寄出去:

git add .

這個指令會把所有變更的檔案加入暫存區。如果你只想添加特定檔案,可以用:

git add filename

小技巧:養成好習慣,只 add 你確定要提交的檔案,不要每次都無腦 git add .,不然可能會不小心把不該提交的東西(比如 .env 設定檔)也加進去。


提交檔案變更

把檔案加入暫存區之後,就可以提交變更了。提交的時候,記得附上一條簡短的描述來說明這次改了什麼:

git commit -m "這次提交的描述訊息"

這條命令會把暫存區的內容保存到倉庫中,成為一個歷史記錄點。commit message 要寫得清楚明白,未來的你會感謝現在的你的。如果想了解怎麼寫好 commit message,可以看看 CommitLint 規範


檢查當前狀態

如果想知道哪些檔案發生了變更但還沒提交,你可以檢查專案的當前狀態:

git status

這條指令會列出已修改但未添加的檔案,或者已添加但未提交的檔案,幫你搞清楚目前專案的狀態。這大概是你最常用的指令之一,有事沒事就 git status 一下吧。


檢查文件變更情況

想看看具體改了什麼內容?用這個指令:

git diff

這個指令會顯示工作區和暫存區之間的差異。在你 git add 之前跑一下,可以確認自己改的東西是對的。


查看提交歷史

想看看過去做了哪些提交?用這個指令:

git log

這條指令會列出專案的所有提交歷史,按時間順序排列。如果覺得輸出太長,可以加上 --oneline 參數讓它更精簡:

git log --oneline

建立與切換分支

分支讓你可以在不影響主要程式碼的情況下進行實驗或新功能的開發。以下是建立新分支並切換到該分支的指令:

git branch new-branch
git checkout new-branch

或者你可以用一個更簡單的指令來同時創建並切換到新分支:

git checkout -b new-branch

這樣你就可以在新的分支上進行開發,不會影響到主分支。分支用完記得合併回去或刪掉,不然分支越來越多會很混亂。


將本地修改推送到遠端倉庫

在本地完成提交後,可以把修改推送到遠端 Git 倉庫(例如 GitHub、GitLab):

git push origin branch-name

這會把你當前分支的提交記錄推送到遠端倉庫。第一次推送新分支的話,記得加上 -u 參數來設定上游追蹤:

git push -u origin branch-name

將遠端倉庫的修改拉取到本地

當遠端倉庫有新變更時,你可以把它們拉取到本地:

git pull

這會從遠端拉取並合併最新的變更到你的當前分支中。在你開始寫 code 之前,養成先 git pull 的好習慣,這樣可以避免很多不必要的合併衝突。


重置變更

有時候你可能會不小心把不該加的檔案加到暫存區。要把暫存區中的檔案移除但保留工作目錄中的變更,你可以用 git reset

git reset HEAD filename

這條指令不會刪除或修改檔案內容,只是把檔案從暫存區移除。想了解更多重置和還原的操作,可以看看 進階 Git 指令


合併分支

當你需要把另一個分支的變更合併到當前分支時,可以用這個指令:

git merge branch-name

這條指令會把指定分支的內容合併到當前分支。如果出現衝突,你需要手動解決衝突並再次提交。關於 merge 和 rebase 的差別,可以看 Merge vs Rebase 比較


從遠端獲取更新(不合併)

如果你只想從遠端獲取最新變更但不進行合併,可以用 git fetch

git fetch

這條指令會從遠端拉取所有更新,但不會自動把它們合併到你的當前分支中。

git fetch 只是拉取遠端倉庫的更新,但不會自動合併,適合在你想先看看遠端有什麼變更的時候使用;而 git pull 則會自動合併更新,適合在你確定想要更新本地分支時使用。簡單說:git pull = git fetch + git merge


暫存工作進度

如果你正在做一件事,還不想提交,但又需要切換到其他分支或處理其他問題,可以用 git stash 把當前進度暫存起來:

git stash

這條指令會把當前的變更暫存,之後可以透過 git stash apply 來取回。git stash 可以讓你暫存未完成的工作,快速切換分支或處理其他問題,而不會丟失當前的工作進度。超級實用!


忽略檔案

在專案開發中,你可能不希望所有檔案都被加入版本控制,例如編譯後的文件或敏感的設定檔。你可以用 .gitignore 來指定哪些檔案應該被 Git 忽略。只需在專案根目錄下創建一個 .gitignore 文件,然後在裡面列出要忽略的檔案或目錄。例如:

/node_modules
*.log
.env

小撇步:當你需要 .gitignore 範例時,搜尋「gitignore [語言/框架] perfect」,就可以找到針對特定開發環境的最佳實踐範例。


總結

這篇文章介紹了 Git 最基本的操作指令,這些指令能幫你在日常開發中管理程式碼。看起來很多,但其實你每天最常用的大概就是 addcommitpushpullstatus 這幾個。用久了就會變成肌肉記憶,完全不用想就能打出來。

隨著你對 Git 越來越熟悉,你會發現還有更多強大的功能等著你去探索。準備好了嗎?繼續看 進階 Git 指令 吧!


延伸閱讀