2011-09-27 121 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