2015-11-18 71 views
5

我想清理我的git倉庫和混帳:本地跟蹤,添加新的分支?

  1. 創建一個新的分支,它反映了我的生產(主)分支。
  2. 刪除任何不必要的分支,遠程或本地。
  3. 讓我的地方分支機構的本地跟蹤分行(IDK如果我必須這樣做,好處是什麼?)
  4. 有我的工作流程的各個階段的一個分支,即本地& DEV(DEV)一個分支,1支分期(分期)和1個生產(生產)分支。本地和開發人員可以共享相同的工作分支,但可以分別進行分段和生產。

在命令行中,你可以看到我的環境。

$ git remote 
dev 
origin 
production 
staging 

$ git branch -r 
dev/dev 
origin/HEAD -> origin/master 
origin/dev 
origin/master 
production/master 
wpengine-findcra/master 

$ git branch -vv 
dev     xxxxxxx <comment> 
*master    xxxxxxx [origin/master] <comment> 
production/staging xxxxxxx [remotes/production/master] <comment> 
staging/master  xxxxxxx <comment> 

我有4個位置我工作了。代碼從1流向4.

  1. 我的本地機器
  2. 開發服務器
  3. 臨時服務器
  4. 生產服務器

我想添加一個新的分支專門爲分期服務器,現在我想讓它鏡像生產(主)分支。但是,我遇到這個錯誤我不知道該怎麼辦。

$ git checkout master 
$ git branch staging 
error: there are still refs under 'refs/heads/staging' 
fatal: Failed to lock ref for update: Is a directory 

我的代碼在origin/master和dev/dev下是最新的。

+0

這個答案有些是有道理的,但原來的問題是處理「推」,我看不出如何應用它對我的情況。 http://stackoverflow.com/questions/11245897/push-to-remote-repo-gives-the-error-there-are-still-refs-under?answertab=active#tab-top – italiansoda

回答

7

如果你有一個名稱中包含斜線的分支,git將創建一個名稱與分支名稱相似的目錄(在.git/refs/heads之內),直到斜線。在該目錄中,它將放置分支本身的參考。因此,目錄.git/refs/heads/staging/存在幷包含一個文件「大師」由於您的分支staging/master

當您嘗試創建分支「分期」,git會嘗試創建文件.git/refs/heads/staging。由於這已經存在,但是一個目錄,這將失敗。因此,您不能在存儲庫中擁有兩個具有這些名稱的分支。

在較新版本的git的錯誤信息會是這樣的:

fatal: cannot lock ref 'refs/heads/staging': 'refs/heads/staging/master' exists; cannot create 'refs/heads/staging' 
+0

謝謝,這指出我在正確的方向!我最終刪除了一個本地分支staging/master,並創建了一個新的分支staging/staging遠程鏈接到我的staging服務器。我還將這個推送到我的原始服務器在原產地/階段又名github。我刪除了staging/master,但能夠檢出origin/master並將它分支到新的staging/staging中,因爲我位於相同的代碼庫中。 – italiansoda