Git 刪除遠程分支有以下幾種方法
服務端UI工具
Git 的服務端圖形化工具主要是 web 端。常用的有 GitHub、Gitea、Gutlab 等。
這些工具都提供了分支管理,可以直接在各服務端找到相關功能,謹慎刪除。
客戶端UI工具
Git 擁有諸多客戶端 UI 工具,如官方自帶的 GitUI、Sublim-Merge及各種編輯器(Eclipse、VSCode、Idea等)集成的UI工具等。
這些 UI 工具提供了更加便捷的分支管理功能,能支持分支的刪除。
命令行
命令行刪除是本文重點闡述的一種方式。
命令通過引用規范從遠程服務器上刪除
git push origin :dev
因為引用規范(的格式)是 :,所以上述命令把 留空,意味著把遠程版本庫的 dev 分支定義為空值,也就是刪除它。
引用規范
現在想要添加一個遠程倉庫:
git remote add origin https://github.com/schacon/simplegit-progit
運行上述命令會在你倉庫中的 .git/config 文件中添加一個小節, 并在其中指定遠程版本庫的名稱(origin)、URL 和一個用于獲取操作的 引用規范(refspec):[remote "origin"]url = https://github.com/schacon/simplegit-progitfetch = +refs/heads/*:refs/remotes/origin/*
引用規范的格式由一個可選的 + 號和緊隨其后的 : 組成, 其中 是一個模式(pattern),代表遠程版本庫中的引用; 是本地跟蹤的遠程引用的位置。 + 號告訴 Git 即使在不能快進的情況下也要(強制)更新引用。
默認情況下,引用規范由 git remote add origin 命令自動生成, Git 獲取服務器中 refs/heads/ 下面的所有引用,并將它寫入到本地的 refs/remotes/origin/ 中。 所以,如果服務器上有一個 master 分支,你可以在本地通過下面任意一種方式來訪問該分支上的提交記錄:
git log origin/master git log remotes/origin/master git log refs/remotes/origin/master
上面的三個命令作用相同,因為 Git 會把它們都擴展成 refs/remotes/origin/master。
更多引用規范請參考:GIT 內部原理-引用規范
git push 語法
或者你可以使用更新的語法(自 Git v1.7.0 以后可用)
git push origin --delete dev
使用 JGit 刪除
private static void deleteRemoteBranch(CredentialsProvider credentialsProvider, Git git) throws GitAPIException {String deleteBranch = "dev";RefSpec refSpec = new RefSpec().setSource(null).setDestination("refs/heads/" + deleteBranch);Iterable<PushResult> results = git.push().setCredentialsProvider(credentialsProvider).setRemote("origin").setRefSpecs(refSpec).call();// 處理推送結果for (PushResult result : results) {for (RemoteRefUpdate update : result.getRemoteUpdates()) {System.out.println("Status: " + update.getStatus());}}}
以上代碼摘自 【JGit】分支管理實踐
其原理是使用了通過引用規范從遠程服務器上刪除,即git push origin :dev
。