4
  1. 我有一个从 git.drupal.org 克隆的裸仓库。
  2. 我已经从这个裸仓库克隆到各种不同的网站。
  3. 从其中的每一个中,我将一个特定于站点的分支推送到裸仓库中。

例如,如果我有 foo.org 和 bar.org,那么我的裸仓库有 drupal 的分支 + 一个称为 foo 和一个称为 bar。

这个想法是我可以充分利用 git 的硬链接来通过本地克隆节省磁盘空间。我想我会保留从 git.drupal.org 获取的裸仓库,并将更改下拉到我的本地副本 foo 和 bar。然后,当更新出现时,它会很容易。

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 无法“看到”裸仓库的遥控器。我能做些什么?

4

2 回答 2

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在 origin 中不作为分支存在,则预期会出现此错误消息。
Maybe是' ' repo中的7.8一个标签。 在这种情况下,您需要先显式获取所述标签origin

git fetch --tags origin

然后变基应该工作

于 2011-09-28T05:38:46.970 回答
2

你需要一个用于变基的工作文件夹。所以你需要克隆这个 repo,然后做你需要的。之后,将修改后的分支推回裸仓库。

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

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

希望这可以帮助。

于 2011-09-27T17:10:10.210 回答