平常會用到但記不起來的 Git 指令,依情境整理成速查表。最後一節是 Sparse Checkout,用在只想檢出大型 repo 其中幾個目錄的時候。
基礎
設定登入資訊:
git config --global user.name '你的名字'
git config --global user.email '你的Email'
列出有異動的檔案:
git clone https://XXX.com.tw/backweb.git 'test/backweb'
git -C 'test/backweb' status --porcelain
git -C 'test/backweb' fetch
git -C 'test/backweb' pull
git clone --filter=blob:none --no-checkout $remoteGit_Url/$childFolderName.git '$sparseCheckoutFolderDir/$childFolderName'
git -C 'test/backweb' sparse-checkout init --cone
git -C 'test/backweb' sparse-checkout set doc/
git -C 'test/backweb' switch master
(-C 後面接相對路徑)
設定 config:
git config --global user.email 'shilvain@XXX.com.tw'
git config --global user.name 'Shilvain'
遠端還沒有分支的時候,第一次對分支做 push,要加上 -u:
git push -u origin feature/somebranch
將變更狀態結果更容易讓程式判讀
git status --porcelain
從 develop 分支切一個新分支
git switch develop
git checkout -b feature/somebranch
第一次從遠端拉分支到地端
git switch -c uat --track origin/uat
取消 merge
適用情形:
- merge 發生衝突
- merge 成功但尚未
git commit
git merge --abort
備註:回到 merge 之前的狀態,工作目錄、HEAD 都會還原。
確認 Branch 對到哪個遠端 Branch
git branch -vv
設定 Branch 對到遠端 Branch
git branch --set-upstream-to=origin/dev
git add 之後,想從 add list 移除特定檔案
git restore --staged [檔案名稱(含副檔名)]
取消 git commit(回到上一個 commit 狀態)
git reset --soft HEAD~1
HEAD~1:代表最後一次 commit--soft:保留檔案變更在 staged(ready to commit)狀態
連 staged 也取消,變成 unstaged:
git reset HEAD~1
設定 branch track remote branch
git branch --set-upstream-to=origin/develop
Git Remote
新增:
git remote set-url add origin https://xxx.aaaa.git
取代原本:
git remote set-url origin https://xxx.aaaa.git
刪除:
git remote rm origin
Git Sparse Checkout
Clone Git 結構
git clone --filter=blob:none --no-checkout http://192.168.1.130:3000/gituser/TestWeb.git
Sparse 初始化
git sparse-checkout init --cone
#設定Sparse目錄
git sparse-checkout set docs
git sparse-checkout set docs/internal docs/external
4️⃣ 保留原設定多檢出 docs/external 目錄
git sparse-checkout add docs/external
拉特定資料
git checkout HEAD
git switch master
清空 sparse-checkout 設定
git sparse-checkout set --no-cone
#刪除/sparse-checkout 檔案
rm -force .git/info/sparse-checkout
查看目前被設定檢出的資料夾:
git sparse-checkout list
#完全退出sparse模式
git sparse-checkout disable
2️⃣ 手動確保設定已關閉
git config core.sparseCheckout false
3️⃣ 重新展開完整目錄
git read-tree -mu HEAD
4️⃣ Cherry Pick
從其他分支或歷史 commit,挑選一個或多個 commit,應用到你目前所在的分支。
基本用法
git cherry-pick <commit hash ID>
如果想一次挑多個 commit:
git cherry-pick a1b2c3d e4f5g6h i7j8k9l
遇到衝突,需要手動解決,然後用 git cherry-pick --continue 繼續。
挑整個範圍
git cherry-pick a1b2c3d^..i7j8k9l
說明:
^表示從前一個 commit 開始..表示到結尾 commit
不產生 commit,先暫存
git cherry-pick -n a1b2c3d
中斷 cherry-pick 或取消
git cherry-pick --abort
跳過
git cherry-pick --skip
結束 cherry-pick 狀態,但保留目前的檔案
git cherry-pick --quit
常見衝突與解法
Cherry-pick 也可能碰到衝突,尤其是原本分支和目標分支同一檔案有不同修改。
處理流程:
- 用
git status查看衝突檔案 - 編輯檔案解決衝突
git add <file>標記已解決git cherry-pick --continue繼續套用
如果不想要這個 cherry-pick,直接 git cherry-pick --abort。