2011-02-23 176 views
380

可以說'我的存儲庫中有一個名爲coolbranch的分支。現在git遠程分支已刪除,但仍出現在'分支-a'

,我決定用(遠程或本地)將其刪除:

git push origin :coolbranch 
git branch -D coolbranch 

太好了! 現在分支真的被刪除了。

但是當我運行

git branch -a 

我仍然得到:

remotes/origin/coolbranch 

東西要注意,就是當我克隆一個新的存儲庫,一切都很好,git branch -a不顯示分支。

我想知道 - 有沒有辦法從branch -a列表中刪除分支而不克隆新的實例?

+1

相關:[本地和遠程刪除GIT中分支(http://stackoverflow.com/q/2003505/456814)。 – 2015-10-18 01:32:19

+14

如果你'git fetch -p'(或'git pull -p'),那麼遠程分支將被修剪。 – yoyo 2016-07-07 22:07:37

回答

481

git remote prune origin,如在其他答案中所建議的,將移除所有這樣的陳舊分支。這可能是你在大多數情況下想要的東西,但如果你只想刪除特定的遠程追蹤分支,你應該做的:

git branch -d -r origin/coolbranch 

(該-r很容易忘記...)

-r在這種情況下將「列出或刪除(如果與-d一起使用)遠程跟蹤分支」。根據git的文檔在這裏找到:https://git-scm.com/docs/git-branch

+4

'git remote prune origin'或任何在我的情況下,'git fetch --prune'標記形式對我來說不起作用。 ...但是'git branch -d -r origin/feature/branch-name'確實起作用。我不確定它是否與'feature'命名空間(git flow)有關,但這就是它的下降情況,以防Google的用戶發現這種情況。 – Misterparker 2016-07-09 05:34:49

+3

這有必要嗎?似乎真的很糟糕,將這些不存在的分支名稱留在列表中,而不會自動修剪它們。 – akronymn 2017-02-27 20:20:37

+0

第二行爲我工作,而不是修剪起源 – jimh 2017-03-29 22:19:26

219

你嘗試:git remote prune origin

git remote docs

修剪

刪除下<名稱的所有陳舊 遠程跟蹤分支>。 這些陳舊的分支已經從<名稱引用的遠程存儲庫 中刪除,但仍在本地可用的「遠程/ <名稱>」中提供 。

帶--dry-run選項,報告 什麼分支將被修剪,但是 並不實際修剪它們。

+1

爲了完整性:它必須類似於http://stackoverflow.com/a/17983126/94687上提到的'git pull --prune'和:'git remote update --prune' – 2015-07-01 12:08:37

179

不要忘了真棒

git fetch -p 

其獲取和李子所有來源。

+0

爲了完整性:它必須與'git remote prune origin'相同,並且類似於http://stackoverflow.com/a/6127884上提到的'git pull --prune'/94687和http://stackoverflow.com/a/17983126/94687。並且:'git remote update --prune' – 2015-07-01 12:07:57

+2

但是如果你運行'git branch -a',分支將仍然可見。 – 2017-04-10 10:23:09

+0

好得多! – charlchad 2017-09-24 12:56:55

12

在我們的特殊情況下,我們使用Stash作爲遠程git回購。我們嘗試了以上所有內容,沒有任何工作。我們最後不得不做到以下幾點:

git branch –D branch-name (delete from local) 
git push origin :branch-name (delete from remote) 

然後,當用戶去拉的變化,他們需要做到以下幾點:

git fetch -p 
+5

這與其他答案完全相同,但是3年後。 – 2016-03-30 01:37:59

+0

'git branch -d branch-name'爲我工作。注意'-D'到'-d'。事實上,當我嘗試使用大寫字母D'-D'時,它爲將來的讀者創建了一個名爲-D – 2016-08-24 21:32:22

10
git remote prune <remote> 

<remote>是一個遠程數據源名稱,如原產地上游

例如:git remote prune origin

+1

的新分支,以下是['git remote prune','git prune','git fetch --prune' ](http://stackoverflow.com/questions/20106712/what-are-the-differences-between-git-remote-prune-git-prune-git-fetch-prune)。 – 2016-03-30 01:44:11