Git CLI
基本工作流程
最常用的一組指令:
git pull
git add .
git commit -m "[commit-message]"
git status # 確認目前狀態
git push
修改最近一次的 commit message(會進入 vim 編輯畫面):
git commit --amend
新增或修改 .gitignore 規則後,清除已經被追蹤的快取檔案,讓新規則生效:
# 記得先把目前的變更 commit 起來,避免這次操作把工作內容一起清掉
git rm -r --cached .
git add .
git commit -m "Applied .gitignore rules and cleared cache"
環境設定
用 SSH 方式來 clone、push 之前,需要先產生金鑰:
ssh-keygen -t ed25519 -C "your_email@example.com"
在本機資料夾初始化一個新的 repo:
git init
第一次在這個 repo 提交前,需要先設定使用者名稱與信箱:
git config --global user.name [name]
git config --global user.email [mail-address]
檢視變更狀態
尚未 stage 的詳細變更內容:
git diff
已經 stage、但還沒 commit 的變更內容:
git diff --staged
確認目前有哪些檔案已經 stage、準備進行下一次 commit:
git status
把指定檔案加入下一次要 commit 的 stage:
git add <file-name>
把指定檔案從目前的 stage 移除(不影響檔案內容本身):
git reset <file-name>
Commit message 慣例
參考這份慣例整理:
feat:新增、調整或移除功能fix:修復 bugtest:新增或修正測試build:建置相關docs:只有修改文件內容opt:維運相關:備份、還原流程等chores:初始化專案、其他雜項
不影響應用程式實際行為的類型
refactor:重構或改寫程式碼結構perf:效能優化style:程式碼風格調整
分支(Branching)
參考 Git 官方說明,典型的分支流程大致是:
- 開一個新分支,嘗試新的想法
- 在這個分支上做幾次 commit
- 需要的話,切回原本分支的位置
- 解決衝突
- 把新分支合併回去
- 如果這個嘗試最後行不通,就直接刪掉這個分支
分支的角色分工
main或master:正式上線的版本develop:把各項功能整合起來、進行測試的分支- 其他較小的分支:個別功能開發用
分支相關指令
檢查目前的 commit 紀錄:
git log
列出目前所有分支:
git branch
建立一個新分支:
git branch <new-branch-name>
刪除一個分支:
git branch -d <branch-name>
切換到另一個分支:
git checkout <branch-name>
把指定分支合併進目前所在的分支(會把該分支的所有 commit 一併帶進來):
git merge <specified-branch>
遠端版本控制
從遠端 repo 抓取最新變更(但不會自動套用到目前分支):
git fetch
merge 與 rebase 是兩種套用變更的方式:
merge:保留雙方完整的歷史紀錄rebase:會改寫歷史紀錄,如果其他協作者已經根據原本的 commit 繼續開發,在共用分支上使用會造成問題
git merge
git rebase
pull 其實就是 fetch 之後再套用變更的組合指令:
fetch+mergefetch+rebase
git pull
git pull --rebase
SSH 金鑰設定細節
設定 SSH 金鑰以用於 GitHub 帳號驗證,可參考這篇教學。
產生 SSH 金鑰
ssh-keygen -t rsa -b 4096 -C "youremail@example.com"
這個指令會在 /User/<username>/.ssh 底下建立 id_rsa 與 id_rsa.pub 兩個檔案。
接著,需要把公鑰複製起來,貼到 GitHub 帳號設定的 SSH and GPG keys 頁面:
pbcopy < /User/<username>/.ssh/id_rsa.pub
pbcopy 是 macOS 的剪貼簿工具:執行後可以在任何地方按 Cmd+V 貼上該檔案的內容。
設定完成後,測試金鑰是否生效:
ssh -T git@github.com
如果看到歡迎訊息,就代表設定成功。
如果原本的 remote 是用 HTTPS 設定的,可以改成 SSH:
git remote set-url origin git@github.com:organization/your-repo.git
確認目前的 remote 設定:
git remote -v
之後 push 就不需要再輸入密碼進行驗證了:
git push