Git 踩坑紀錄(一)git remote prune:致刪不掉的那些分支
寫這篇算是記錄自己的踩坑紀錄,因為 Git 的學習實在是很難不透過實作去理解,或者說不實做就完全不知道是怎麼運作的吧。
Use git remote prune for clean up the branch which is useless.
清理已經不需要的分支。狀況一:
有時候,在本地(Local)跟遠端(Remote)已經把不要的分支刪除,但下了 git branch -a 指令的時候,那些刪除的分支還是陰魂不散的狀況。
我困擾了三個月才認真找解法,真的是蠻不應該的 XD
事實證明,真的要覺得麻煩的時候才會想要認真面對問題。
狀況二:
或者是,明明本地分支跟遠端分支都已刪除,但下了 git checkout 的時候,還是會出現照理來說已經不存在的分支。
一開始,大家一定會先嘗試的指令是:
【針對本地分支】git branch -D <branch name>
git branch -d <branch name>
注意:刪除分支的時候,需要在其他分支下指令,不能在當下的分支要求刪除當下的分支。
【針對遠端分支】
第一種方式:
最簡單的方式,到 Bitbucket / Github 找 Branches 管理的地方,有可以直接刪除的按鈕。
下圖以 Bitbucket 為例子,最右邊會有…,點它就會出現 delete 的選項。
第二種方式:git push origin — delete <branch name>
不過,我通常還是都用網頁上的垃圾桶按鈕刪除,主要還是怕自己下指令勿刪,或是對指令不夠熟悉。而且刪除分支的方法其實很多,上面提到的這些是我自己實際應用比較常碰到的;當然比較好的狀況是透過指令刪除啦,畢竟開網頁找分支,確實比下指令慢上很多。
git push origin :<branch name>
// 這作法我比較少用,因為用之前腦筋要先轉一下
遇到以上兩種狀況,也都試過刪除分支的指令,可以試試看:
STEP 00.git remote show origin
在找解法的時候搜到的指令,git 官方文件的意思是:查看特定遠端版本資料庫 repository 的詳細資訊。
•目前是針對哪一個遠端版本資料庫 repository 的網址。
•本地分支對應到遠端版本資料庫 repository 的遠端分支的資訊
(Local Branch <-> Remote Branch,下圖藍色的 tracked)
也就是說,當在特定的分支上執行 git push,它會自動推送到對應的遠端分支。
•可以看出哪些遠端分支是本地沒有的(下圖綠色的 new)。
•曾抓取的遠端分支已經被移除(下圖橘色的 stale),後面的指令很清楚。
•哪些本地分支可以透過 git pull 自動和遠端追蹤分支合併。
STEP 01.git remote prune origin — dry-run
// 確認清不乾淨或刪不掉的分支是不是在這個清單裡面
prune 是修剪、修整的意思 ,--dry-run
會列出可以修剪的分支清單。
執行這個指令並不會真的刪除,只是告訴你有哪些分支。
STEP 02.git remote prune origin
// 確定要清除,就可以執行這個指令
希望大家有成功處理掉陰魂不散的分支,git 真的要動手試試看阿!任何事都是這樣,實際做了才能體會。最近很熱衷隨時跟同事開啟討論技術的話題,大家都會各自丟出自己的理解,可以發現原來自己哪裡理解不夠透徹,還蠻有趣的。但前提都是自己要先嘗試過,共勉之。
參考資料:
git 官方文件
為你自己學 git — 高見龍(git 很多基礎觀念都是這裡學)