git добавить ветку удаленного отслеживания в голое РЕПО
- у меня есть голый РЕПО, который был клонирован из git.drupal.org.
- я клонировал с этого голого РЕПО на различные веб-сайты.
- из каждого из них я толкаю ветку для конкретного сайта на голое РЕПО.
Например, если у меня есть 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
Фу и бар отправились на ветку 7.x но я хотел бы обновить их до 7.8, например, с помощью git rebase 7.8
, но это не удается:
fatal: Needed a single revision
invalid upstream 7.8
Фу и бар не могут "видеть" пульты голого РЕПО. Что я могу сделать?
2 ответа:
2 пункта, как описано в "git rebase fatal: требуется одна ревизия":
- вам нужно указать имя ветви, которое в вашем случае будет
origin/7.8
, а не7.8
:git rebase origin/7.8Должно сработать.
- вы не можете перебазироваться в ветвь, которая не содержит фиксации, на которой изначально была создана ваша текущая ветвь. (поэтому убедитесь, что это относится к вашему РЕПО)
The OP artfulrobot отчеты:
git rebase origin/7.8 fatal: Needed a single revision invalid upstream origin/7.8
На что я ответил:
Если
7.8
не присутствует в origin как ветвь, ожидается это сообщение об ошибке.
Может быть7.8
является тегом в репо 'origin
'.
В этом случае сначала нужно явно извлечь указанные теги :git fetch --tags origin
Тогда ребаза должна работать
Вам нужна рабочая папка для перебазирования. Поэтому вам нужно клонировать это РЕПО, а затем делать то, что вам нужно. После этого отодвиньте модифицированные ветви обратно в голое РЕПО.
В качестве альтернативы можно указать рабочий каталог
git --work-tree=../somedir rebase 7.8
. К сожалению, параметры worktree и Git dir для команды git не полностью реализованы для всех команд. Первый вариант-самый лучший.Rebase нуждается в работающем dir, потому что он должен дать вам контроль, когда он сталкивается с конфликтом. Затем вы можете исправить конфликт и выдать команду
git rebase --continue
, чтобы позволить ему применить остальные коммиты на новой базе.Надеюсь, это поможет.