Git 是在編碼專案中實施版本控制的絕佳方式–事實上,它是如此絕妙,以至於幾乎成了必選項。
其原理是在主版本庫中建立重複的分支,對程式碼進行修改,然後將修改與其他分支合併。這意味著你的版本庫中會有很多舊的分支。雖然這些分支的檔案大小通常不大,但您仍需要在本地分支上執行 git delete
操作,以保持整潔。
好在這並不費力。不過,您需要根據是否合併變更以及在刪除過程中出錯時該如何處理來考慮最佳方法。您甚至可能需要恢復刪除的分支。每種情況都需要不同的技能和命令。
在本教學中,我們將向您演示如何在本地分支上執行 git 刪除操作。首先,我們要談談你想在 Git 中刪除本地分支的一些原因。
什麼是 Git 分支?
Git 倉庫是分支的集合,也就是核心程式碼的副本。事實上,沒有分支就沒有一個正常執行的 Git 倉庫。
通常,你會有一個主倉庫(名義上的名稱是 “main” 和 “trunk”)。主倉庫中包含的是您不想編輯的生產程式碼。相反,你會在主版本庫中建立一個複製分支,然後在你的分支中進行你需要的修改。當需要將這些更改帶回核心程式碼時,你就需要檢查併合並它們。
分支讓團隊中的每個人都能在同一個專案中獨立協作。在此期間,也不會有修改工作程式碼或踩踏其他修改的危險。
不過,您也需要在本地分支上執行 git delete
操作。這將是您的一項常規操作,而且這樣做有很多充分的理由。
為什麼要在 Git 中移除分支?
您的生產程式碼會在主分支中。這也是唯一一個具有永久性的分支。
相比之下,你建立的其他分支幾乎都是臨時性的。一旦你完成了工作,你就會提交修改,然後將它們與主分支合併,可能是在 GitHub 等線上倉庫中合併。
這意味著,根據專案和團隊的不同,你往往會同時開啟很多分支。但是,一旦完成合並,這些分支並不會消失。
因此,有幾個原因需要刪除本地 Git 分支:
- 一般內務整理:在家裡,當你做完飯,你會清洗餐具並把它們放好。使用 Git 倉庫也是一樣: 當你完成工作時,你會合並改動並刪除任何你不再需要的分支。這也會讓你的專案和倉庫更容易瀏覽。
- 版本庫檔案大小:雖然 Git 倉庫通常很小,對專案的大小影響不大,但你還是應該留意一下。縮小版本庫大小的方法之一就是刪除不需要的分支。
- 潛在效能:即使你的核心程式碼效能很好,但考慮到你正在處理的分支,它的效能可能並不好。因此,你應該儘量減少開放分支。否則,在你對專案進行階段性調整之前,它可能會給你的團隊帶來糟糕的效能。
正如你稍後會看到的,在本地分支上執行 git delete
在大多數情況下都很簡單。不過,在使用這條命令時,最好還是先了解一下它的原理,因為它並不能清除 repo 中與該分支相關的所有內容。
刪除本地 Git 分支會怎樣?
從技術層面上講,分支只是指向特定提交的指標,也就是你想包含在主分支中的一段程式碼。因此,當你刪除本地 Git 分支時,提交仍會保留。
稍後,我們將討論分支恢復,以及由於這些提交仍保留在版本庫中而可能出現的情況。現在,請先了解有兩種不同型別的變更:
- 合併變更:一旦你將一個分支與主分支合併,程式碼就會盡可能保持最新。用技術術語來說,這就相當於移動主分支的引用,以趕上你的輔助分支。
- 未合併的變更:如果不合並變更,就會有一個分支不如主分支最新。這樣,主分支就沒有最新的參考提交。
這一點我們稍後會詳細討論。無論如何,這也是關於何時刪除分支的另一個要點。
何時對本地分支執行 Git Delete
考慮到刪除帶有未合併改動的分支的危險性,在進行程式碼合併之前,不要在本地分支上執行 git delete
是很重要的。這將確保每個分支都有最新的引用,進而確保最新的程式碼可用。
另外,在執行 git delete
之前,最好確保臨時分支中的任何提交都不再需要。雖然您可以在一定程度上恢復分支,但這並不是您需要時才會做的工作。稍後我們將對此進行深入介紹。
如何在本地分支上執行 Git Delete
在本教學的其餘部分,我們將向你展示如何在本地分支上執行 git delete
操作。我們還會討論如何處理未合併的變更。
接著,我們會討論可能會出現的錯誤,以及如何恢復已刪除的本地分支。
最後,我們將簡要介紹遠端分支以及如何刪除它們。
先決條件
Git 本身提供了一套簡單的命令集,無需翻開教科書就能為你提供強大的功能。即便如此,訪問 Git 倉庫還是有幾種不同的方式,這取決於你選擇的應用程式和程式碼編輯器。
雖然你可以在 GitKraken 或 Sublime Merge 等專用圖形使用者介面(GUI)中找到 “minimal click” 設定,但我們將保持簡單,使用作業系統內建的工具。
要繼續學習,你需要具備以下條件:
- 命令列訪問許可權:我們的示例將使用 macOS 和 iTerm。不過,你也可以使用 Windows 的 Cmder、macOS 的預設終端、Linux 的預設終端等。
- 訪問特定檔案:你需要在本地電腦上儲存專案檔案,因為沒有這些檔案,你將無計可施!
- 命令列知識:掌握一些命令列知識會有幫助–具體來說,就是幫助你瀏覽檔案的命令,以及對命令列工作原理的一些瞭解。
實際上,只要你有一個 Git 倉庫和一個終端視窗,這就足夠了。
執行基本的 Git Delete 操作
首先,我們假設你想刪除一個已合併變更的分支。這是最直接、最典型的做法。
不過,您可能需要執行 git branch -a
或 git branch --list
來檢視所有分支,並在您的倉庫中找到正確的分支:
列出本地 Git 倉庫中的分支
下面是刪除分支所需的命令:
git branch -d branch-name
你需要使用具體的分支名稱,而不是我們的佔位符。
這裡的 -d
標誌代表 “刪除”,如果使用小寫形式,就可以防止刪除有未合併修改的分支。
如果你嘗試刪除一個未合併的分支,你會看到一個錯誤(其實更像是一個警告):
試圖刪除 Git 倉庫中帶有未合併變更的分支
不過,你可以使用 -D
將標記大寫,跳過這個保護性警告。這樣,你就可以刪除有未合併變更的分支了。
需要注意的是,如果使用大寫版本,刪除分支時將不會得到確認,因此需要謹慎使用。
什麼原因導致 “無法刪除分支” 錯誤?
因為刪除倉庫分支是一個重大決定,沒有簡單的解決方法,所以如果您做錯了,Git 就會出錯。
例如,有時你在本地分支上執行 git delete
操作時,會看到 “Cannot delete branch” 的錯誤提示:
試圖刪除 Git 倉庫中的某個分支時報錯
原因很簡單,你在 Git 倉庫中的當前位置造成的。你無法刪除 “check out” 的分支。
解決辦法是轉移到另一個分支。
因此,我們建議您 check out main
分支。這樣,如果你試圖刪除 main
分支,就會出現錯誤,而且還能清除版本庫中的其他分支。
如何恢復已刪除的本地 Git 分支
鑑於刪除本地分支後仍會保留提交,因此在執行git delete
操作後仍有少量機會恢復分支。不過,這比先合併這些變更要麻煩得多。在這種情況下,你就會知道自己不再需要某個分支了。
每個提交都有一個雜湊值,作為其參考。你可以使用雜湊值簽出並建立一個新的分支:
顯示 Git 中某個提交的參考雜湊值的長短版本
不過,如果不知道已刪除分支的雜湊值,可以使用 reflog
命令。這些 “reference logs” 很像一些本地開發工具等應用中的日誌。
雖然使用 git reflog
完全是另一篇文章的話題,但你可以使用基本功能來查詢舊提交的雜湊值。執行 git reflog
,你會看到一個提交列表:
執行 git reflog 命令並輸出結果的終端視窗
通過第一列雜湊值,您可以簽出提交併建立一個新分支。例如
git checkout 5744ff6
git branch f9d2db5
不過,在 Git 中恢復已刪除的分支並非萬無一失。
在某些情況下,reblog 中沒有提交,也沒有 HEAD
引用。因此,在本地分支上執行 git delete
之前,最好先合併變更,這樣才能更安全地處理分支。
使用遠端 Git 分支
在本地分支上執行 git delete
操作時,通常會關聯到一個遠端 repo。尤其是在使用 Git 將網站拉到遠端伺服器的情況下。
不過,GitHub 和 GitLab 都有刪除遠端 Git 分支的相同流程。這與其他向上遊推送的方法類似。
命令如下:
git push remote-name -d remote-branch
對於 remote-name
,我們看到的大多數版本庫都使用 “origin”。remote-branch
的引用將與本地分支相同(除非你重新命名了本地分支,這超出了本文的討論範圍)。
另外,使用 git branch -a
可以檢視所有分支,包括本地和遠端分支。如果只想看遠端分支,可以用 git branch -r
。
執行該命令後,你會看到一條確認資訊,這時你應該再執行一次 git branch -a
,檢查是否如你所料刪除了所有分支。
小結
Git 是為數不多的能通過可讀、直觀的命令為你提供強大功能的工具之一。這同樣適用於刪除本地機器上不再需要的分支。不過,在本地分支上執行 git 刪除時仍需謹慎。
因為如果試圖刪除未合併的變更,要麼會出錯,要麼會刪除一些會影響未來專案工作的內容。此外,您還需要刪除遠端分支。本地和遠端版本庫都需要你進行良好的內務管理,以保持較高的效能和最小的檔案大小。
評論留言