[GIT]如何刪除分支【轉載】
前言
在用git開發過程中,我們在分支合并后會將分支刪除。這里我們會遇到兩種情況,一是本地和遠程的分支都還在,另一種就是遠程倉庫已經刪除了,但本地倉庫還有備份。
本地和遠程分支都在
這是最常見的情況了,在這種情況下,我們會先刪除本地分支,再刪除遠程分支。
1. 刪除本地分支
在git中,刪除本地分支并不會影響遠程倉庫中的任何分支。刪除本地分支的命令:
git branch -d <local_branch>
先列出所有本地分支
1 $ git branch 2 * feature/test1 3 main
我們可以看到現在本地有兩個分支,當前在<feature/test1>這個分支上。接下去我們要刪除這個分支,就得先切換到其他分支
1 $ git checkout main 2 Switched to branch 'main' 3 Your branch is up to date with 'origin/main'. 4 $ git branch -d feature/test1 5 Deleted branch feature/test1.
注意,如果分支包含未合并的更改和未推送的提交,則該 -d標志將不允許刪除本地分支。此時,如果你確定了不想要分支的內容,可以使用 -D替換 -d來強制刪除此分支
現在我們再來看看分支情況:
1 $ git branch -a 2 * main 3 remotes/origin/HEAD -> origin/main 4 remotes/origin/feature/test1 5 remotes/origin/main
此時我們已經成功刪除了本地倉庫<feature/test1>,但我們之前有推送過分支到遠程倉庫,從上面列表可知,遠程倉庫中還存在此分支,那我們還需要刪除遠程倉庫中的分支。
2. 刪除遠程分支
刪除遠程分支的命令:
git push <remote_name> -d <remote_branch>
先列出所有遠程分支:
1 $ git branch -r 2 origin/HEAD -> origin/main 3 origin/feature/test1 4 origin/main
我們可以看到,此時遠程倉庫有<origin/feature/test1>和<origin/main>兩個分支
origin/HEAD并非分支,它指向遠程服務器上的默認分支,即為origin的遠程倉庫中的HEAD,一般此值的指向不會改變,具體請另行Google。
1 $ git push origin -d feature/test1 2 To https://github.com/***/git-practice.git 3 - [deleted] feature/test1
這時候再看看分支情況
$ git branch -a * main remotes/origin/HEAD -> origin/main remotes/origin/main
可以看到我們已經成功刪除了本地和遠程倉庫中的分支。此時,去Github上查看時,分支也已經刪除。
清理遠程倉庫已經刪除的分支
有時候因為操作不當,直接在遠程倉庫中刪除了分支,而本地倉庫還保留著原來的遠程分支副本。此時再用git push <remote_name> -d <remote_branch>刪除分支會提示錯誤:
1 $ git branch -a 2 * feature/test2 3 main 4 remotes/origin/HEAD -> origin/main 5 remotes/origin/feature/test2 6 remotes/origin/main
此時,我們去Github上直接刪除<feature/test2>這個分支,然后再同前文一樣進行分支刪除。
1 $ git branch -d feature/test2 2 Deleted branch feature/test2 3 4 $ git push origin -d feature/test2 5 error: unable to delete 'feature/test2': remote ref does not exist 6 error: failed to push some refs to 'https://github.com/***/git-practice.git' 7 8 $ git branch -a 9 * main 10 remotes/origin/HEAD -> origin/main 11 remotes/origin/feature/test2 12 remotes/origin/main
當我們查看分支時,可以看到<remotes/origin/feature/test2>還是存在的。此時,我們以下命令查看遠程分支和本地的對應關系:
git remote show <remote_name>
$ git remote show origin * remote origin Fetch URL: https://github.com/***/git-practice.git Push URL: https://github.com/***/git-practice.git HEAD branch: main Remote branches: main tracked refs/remotes/origin/feature/test2 stale (use 'git remote prune' to remove) Local branch configured for 'git pull': main merges with remote main Local ref configured for 'git push': main pushes to main (up to date)
我們可以看到main分支的狀態是tracked,而feature/test2的狀態是stale,并且后面git已經提示了處理方式(use ‘git remote prune’ to remove)。
$ git remote prune origin Pruning origin URL: https://github.com/***/git-practice.git * [pruned] origin/feature/test2 $ git branch -a * main remotes/origin/HEAD -> origin/main remotes/origin/main
至此我們已經成功清理掉遠程已經刪除的分支在本地的緩存。

浙公網安備 33010602011771號