Git 指令圖解(三):遠端、stash 和救援指令,每個指令都能按下去看

Git 指令圖解最後一篇:remote、push、fetch、pull、stash,還有 reflog、gc、fsck 這些出事時才想到的指令。每個指令都能在沙盒裡按下去看結果,diff origin/master..master 和 stash@{0} 常見的誤解也一併釐清。

Git 指令圖解(三):遠端、stash 和救援指令,每個指令都能按下去看
Git 指令圖解第三篇封面:本地倉庫和遠端 origin 的提交圖
Git 指令圖解第三篇封面:本地倉庫和遠端 origin 的提交圖

前兩篇(基本操作、歷史與分支)都在自己的電腦上。這篇是最後一段:跟遠端倉庫同步、把手邊的修改先收起來,以及幾個平常少用、出事時很需要的指令。

用法一樣:點指令按鈕看動畫,按「重播」再看一次。終端機輸出照 Git 2.43 的實際格式整理。

遠端:push、fetch、pull

這組有兩個面板,上面是你的電腦,下面是遠端伺服器。push 時提交從上往下送,fetch 時從下往上拿。

互動示範:remote add、push、fetch、pull 和 diff origin/master..master

這裡有個常見的誤解。git diff origin/master..master 常被說成「遠端有、本地沒有的」,但 diff 的兩個點只是直接比兩端的檔案。遠端新增的檔案在結果裡反而像被刪掉,因為本地沒有它。想知道的通常是這三件事之一:

  • 本地自己改了什麼:git diff origin/master...master(三個點,從分岔點開始比)。
  • 本地多了哪些提交:git log origin/master..master。
  • 遠端多了哪些提交:git log master..origin/master。

git push origin :分支名 這種冒號寫法,現在多半寫成 git push origin --delete 分支名,比較好讀。git pull 是 fetch 再合併。兩邊都有新提交時,新版 Git 會先停下來,要你用 --rebase 或 --no-rebase 指定怎麼合(或設定 pull.rebase)。不想讓它直接合進來的話,先 fetch,看過再合。

暫存手邊的修改

改到一半,臨時要切去修 bug,又不想提交半成品,就用 git stash 先收起來。

互動示範:git stash、list、show、apply

常有人說 stash@{0} 是「第一次暫存」,剛好相反,stash@{0} 是最新的一筆,越舊編號越大。apply 套用後 stash 還留在清單裡;想套用完順便刪掉,用 git stash pop。

查詢、救援與維護

最後一組比較雜:底層查詢、找回歷史、搜尋和倉庫維護。平常不太會打,但 reflog 值得記住。reset --hard 跳到錯的提交、rebase 弄丟提交,或 branch -D 刪錯分支,第一步都是 git reflog。但它只記得提交過的東西,還沒提交的修改不在 reflog 裡。

互動示範:ls-files、reflog、show-branch、grep、gc、fsck 等

幾個重點:

  • HEAD@{5} 是 HEAD 五步之前的位置,跟 HEAD~5(往回 5 代祖先)不是同一件事。
  • v2.0 是附註標籤時,git rev-parse v2.0 拿到的是標籤物件的 hash,要提交的 hash 得寫 v2.0^{commit}。
  • reflog 只存在你的電腦,不會被 push。預設保留 90 天,已經沒有分支指到的項目是 30 天。
  • git gc 不會刪掉 reflog 還指得到的提交,沒人指到的物件預設也要過兩週才清。

這篇的指令速查

  • git remote add、git push、git push origin :<分支>、git push --tags:設定遠端和推送
  • git fetch、git fetch --prune、git pull:下載、清理、下載並合併
  • git diff A..B、A...B、--stat:比較兩個分支
  • git stash、list、show -p、apply:暫存手邊的修改
  • git ls-files、git ls-tree、git rev-parse:底層查詢
  • git reflog、HEAD@{n}、master@{yesterday}:找回走過的位置
  • git log --graph、git show-branch:看分支關係
  • git grep:搜尋追蹤中的檔案
  • git gc、git fsck:維護和檢查

系列前兩篇:

作者

碼力獅 MaliLion

用 AI 與程式公開打造遊戲、工具和 3D 世界,一次一個 Side Project。

#Git#教學#版本控制#互動圖解
回到所有文章

留言