У меня есть пустой репозиторий, который используется в качестве центрального хранилища для моего проекта. Все разработчики делают, git clone <repo>
чтобы поделиться с ним. Когда они делают клон, они получают извлечение главной ветви (если они не делают git clone -n
), потому что repo.git/HEAD
содержит ref: refs/heads/master
, делая это Активная ветвь .
Вопрос в том, как правильно изменить Active Branch ? Я мог бы просто взломать repo.git/HEAD
файл напрямую, но это кажется неприятным и, ну, в общем, хакерским.
Я попытался сделать это git checkout <otherbranch>
в .git
каталоге репо , но это не удалось, потому что я не был в рабочем дереве.
Я пытался, git update-ref HEAD refs/heads/otherbranch
но это только что обновило refs /heads / master так, чтобы оно совпадало с refs /heads / otherbranch (хорошо, я сделал это в фиктивном репозитории, а не в моем производственном!)
Я пытался, git update-ref --no-deref HEAD refs/heads/otherbranch
и это почти сработало. Он обновил HEAD
файл, но установил его в SHA1 коммита, на который указывает refs/heads/otherbranch
.
Я тестирую с git-версией 1.7.0.2.msysgit.0
.
Я предполагаю, что нет никакого способа сделать это через git push
, так как позволить всем и каждому изменить ветку по умолчанию кажется немного небезопасным (!), Но, безусловно, есть лучший способ сделать это в .git
каталоге репо, чем прямой взлом HEAD
файла.
Ответы:
Если у вас есть доступ к удаленному репо, эта статья предлагает :
как указано в
git-symbolic-ref
Если у вас нет доступа к удаленному репо, смотрите мой предыдущий ответ .
Помните, что такая команда
git remote set-head
:не меняет ветку по умолчанию удаленного репо.
Это только изменяет удаленную ветку отслеживания, сохраненную в вашем локальном репо, как
refs/remotes/<name>/HEAD
не меняет
HEAD
себя (опять же, толькоrefs/remotes/<name>/HEAD
), следовательно, необходимостьgit symbolic-ref
.Так что
git remote set-head
это не ответ здесь.git symbolic-ref HEAD
есть, если у вас есть прямой доступ к удаленному репо.источник
git symbolic-ref HEAD refs/heads/mybranch
работал просто отлично для меня! СПАСИБО! ;)Чтобы изменить ветку, вам нужно изменить ссылку HEAD на ветку, которую вы хотите использовать.
Сначала перечислите все ссылки в голом хранилище, выполнив
Затем найдите ссылку на вашу ветку, формат будет следующим
refs/heads/<my_branch>
. Следующим шагом является проверка текущей ссылки, просто введите:так что вы знаете, какая ветка является текущей, а затем обновите ее при необходимости
Это все. Наслаждаться.
источник
Как правильно изменить Active Branch?
status: git checkout в репозитории .git возвращает фатально: эта операция должна выполняться в рабочем дереве
советы: просто добавьте аргумент --work-tree
подробный пример: предположения: голые мерзавцы на удаленном сервере:
на локальном сервере: создайте ветку version.1.7 (наш другой филиал)
git branch версия 1..7
git push origin version.7.7
на удаленном сервере с git bare repo:
$ cd ~ / bare_git_repository.git
$ git branch
версия.1.7
Как указано, следующая команда
git checkout version.1.7
возвращение
роковая: эта операция должна выполняться в рабочем дереве
Используя следующую команду
успешно изменить Active Branch
$ git branch
мастер
проверьте результаты со следующим
надеюсь это поможет
источник
Кроме того, если у вас нет доступа к пустому хранилищу, сделайте,
git remote set-head
и вы сделалиСмотрите этот предыдущий ответ
источник
У меня также есть репо на нашем сервере, и я смог успешно получить файлы, используя
в новый локальный репозиторий, хотя на man-странице сказано, что это только для не голых репозиториев.
источник
Я сравнил два каталога до и после применения
git symbolic-ref HEAD refs/heads/mybranch
и похоже, что был изменен только файл repo.git / HEAD, так что, вероятно, достаточно просто «взломать» файл.
источник