2015-01-08 27 views
0

我已經看到很多刪除舊的分支,但我的混淆是刪除名稱中的遠程/起源/功能的舊分支。如何刪除本地主機上的舊的git分支與遠程/來自名稱

這裏有一些我想在本地而不是遠程刪除分支:

remotes/origin/feature/ghost-user-view2 
remotes/origin/feature/ghosting-records-handling 
remotes/origin/feature/profile-sync-fix 

我試圖git branch -D feature/profile-sync-fix

這沒有奏效。我勉強努力嘗試,並刪除一些我無法回頭的東西。在本地處理它而不影響遠程分支的正確方法是什麼?

+0

你試過'git分支-rD遙控器/原點/特性/配置文件同步修復程序? –

+0

不會刪除遠程? – user24793

+0

不,只有遠程分支的本地對應方。 –

回答

2

正如你可能知道的:在git中一切都是本地的。你的歷史是本地的,你的標籤是本地的,你的分支是本地的。對於偏遠分支,情況甚至如此,但我瞭解您對該主題的不安全感。

作爲git中的任何分支,遠程分支只是對特定提交的引用。 Git認爲這些分支由於其命名而不同。通常所有本地分行都可以在您的.git目錄中找到refs/heads,另一方面遠程分行在refs/remotes(和標籤refs/tags)中找到。否則,這個概念與「通常」的分支沒有什麼不同。

編輯:作爲Jubobs在評論中建議:術語remote-tracking branch是減少混亂,應該暗示爲什麼這些分支是本地的。他們只是跟蹤遠程分支,而不在遠程本身。

現在你應該明白,雖然git branch -r列出了遠程分支,但分支仍然是完全本地的。


但是,git怎麼知道把分支/變化從遠程放到哪裏?

好吧,那很簡單,它的全部內容都可以在您的存儲庫配置中找到,您可以在.git/config中找到;在這裏你可以找到你的遠程配置(如果有的話)應該看起來很類似:

[remote "origin"] 
    url = /this/is/the/url/to/my/remote 
    fetch = +refs/heads/*:refs/remotes/origin/* 

有趣的是這個小文本片段:fetch = +refs/heads/*:refs/remotes/origin/*

它有什麼作用?

它告訴git從refs/heads(包含所有本地分支)獲取遠程存儲庫的所有分支,並將所有這些分支「映射」到refs/remotes/origin(位於本地存儲庫中)的分支上。


TL; DR:git branch -rd只會刪除本地分支。遠程存儲庫中分支的本地副本。

+1

我發現術語*遠程跟蹤分支*比簡單的*遠程分支*更容易混淆,這可能被理解爲生活在另一個(遠程)回購協議中的分支。 – Jubobs

+1

像往常一樣,你碰到了釘在頭上,@Jubobs :) –

+0

我很確定我沒有拿出那個術語,但:) :) – Jubobs

相關問題