2011-09-27 128 views
3
  1. 我有一個從git.drupal.org克隆的裸回購。
  2. 我已經從這個裸露的回購克隆到各種不同的網站。
  3. 從每個這些,我推動一個特定於站點的分支到裸露的回購。

例如,如果我有foo.org和bar.org,那麼我的裸回購就有drupal的分支機構+一個叫foo和一個叫bar。git添加遠程跟蹤分支到裸回購

這個想法是我可以充分利用git的硬鏈接來節省本地克隆的磁盤空間。我以爲我會保留從git.drupal.org獲取裸露的回購,並將更改下拉到我的本地副本,foo &酒吧。然後當更新出現時,它會很容易。

bare-repo$ git fetch >/dev/null ; git branch -a 
* 7.x 
    foo 
    bar 
    remotes/origin/7.x 
    remotes/origin/8.x 

foo和bar從分支7.x開始,但我想將它們更新到7.8,例如,通過git rebase 7.8但這種失敗:

fatal: Needed a single revision 
invalid upstream 7.8 

foo和酒吧不能「看到」裸回購的遙控器。我能做什麼?

回答

2

2分,如 「git rebase fatal: Needed a single revision」 解釋說:

  • 你需要指定一個分支的名稱,而你的情況是origin/7.8,不7.8
 
    git rebase origin/7.8 

應該管用。

  • 您不能重新綁定到不包含您當前分支最初創建的提交的分支。 (所以一定要確保這是你的回購的情況下)

OP artfulrobot報告:

git rebase origin/7.8 
fatal: Needed a single revision invalid upstream origin/7.8 

對此我的回答是:

如果7.8不存在於起源作爲分支,預計會出現此錯誤消息。
也許7.8是標籤'origin'回購。
在這種情況下,你需要明確地獲取所述標記第一:

git fetch --tags origin 

然後底墊應該工作

+0

'$ git rebase origin/7.8' result:'致命的:需要單個修訂無效的上游來源/ 7.8' – artfulrobot

+1

@artfulrobot:如果'origin'中不存在'7.8'作爲分支,則會出現此錯誤消息。也許'7.8'是'origin'回購的標籤。在這種情況下,您需要首先顯式獲取所述標籤:'git fetch --tags origin'。然後,rebase應該起作用。 – VonC

2

你需要一個工作文件夾rebase。所以你需要克隆這個回購,然後做你需要的。之後,將修改後的分支推回裸露的回購站。

或者,您可以指定一個工作目錄git --work-tree=../somedir rebase 7.8。不幸的是,git命令的worktree和git dir選項並未完全針對所有命令實施。第一種選擇是最好的。

Rebase需要一個工作目錄,因爲它需要在遇到衝突時給予控制權。然後,您可以修復衝突併發出一個git rebase --continue命令,讓它在新基礎上應用其餘的提交。

希望這會有所幫助。

+0

是。富和酒吧*是*工作樹木。問題在於,從foo(以裸回購作爲起源)開始,我無法到達origin/remotes/7.8;我不知道如何在光禿禿的樹枝上創建一個分支,以便foo從中取出/合併。 – artfulrobot

+0

'git remote show origin'的輸出是什麼? –

+0

@AdamDynitruk:這裏是'git remote show origin'的輸出http://paste2.org/p/1681681 – artfulrobot