git将远程跟踪分支添加到裸仓库

时间:2011-09-27 16:25:28

标签: git git-branch remote-branch git-bare

  1. 我有一个从git.drupal.org克隆的裸仓库。
  2. 我已经从这个简单的回购克隆到各种不同的网站。
  3. 从这些中,我将特定于站点的分支推送到裸仓库。
  4. E.g。如果我有foo.org和bar.org,那么我的裸仓就有drupal的分支+一个名为foo,一个名为bar。

    我的想法是,我可以充分利用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和bar无法“看到”裸仓库的遥控器。我该怎么办?

2 个答案:

答案 0 :(得分:2)

你需要一个工作文件夹来进行rebase。所以你需要克隆这个仓库,然后做你需要的。之后,将修改后的分支推回到裸仓库。

或者,您可以指定工作目录git --work-tree=../somedir rebase 7.8。遗憾的是,git命令的worktree和git dir选项并未完全针对所有命令实现。第一种选择是最好的。

Rebase需要一个工作目录,因为它需要在遇到冲突时让你控制。然后,您可以修复冲突并发出git rebase --continue命令,让它在新基础上应用其余提交。

希望这有帮助。

答案 1 :(得分: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

然后rebase应该工作