我有一个裸存储库,用作我的项目的中央存储。所有的开发人员都会git clone <repo>与它分享。当他们进行克隆时,他们会签出 master 分支(除非他们这样做git clone -n),因为repo.git/HEADcontains ref: refs/heads/master,使其成为 Active Branch 。
git clone <repo>
git clone -n
repo.git/HEAD
ref: refs/heads/master
问题是,如何正确更改 活动分支 ?我可以简单地直接破解repo.git/HEAD文件,但这看起来很讨厌,而且,好,hacky。
我尝试git checkout <otherbranch>在 repo.git目录中进行操作,但失败了,因为我不在工作树中。
git checkout <otherbranch>
.git
我试过git update-ref HEAD refs/heads/otherbranch了,但只是更新了 refs/heads/master 与 refs/heads/otherbranch 相同(好吧,我在一个虚拟存储库中做了那个,而不是我的生产库!)
git update-ref HEAD refs/heads/otherbranch
我试过git update-ref --no-deref HEAD refs/heads/otherbranch了,这几乎奏效了。它更新了HEAD文件,但将其设置为 . 指向的提交的 SHA1 refs/heads/otherbranch。
git update-ref --no-deref HEAD refs/heads/otherbranch
HEAD
refs/heads/otherbranch
我正在使用 git version 进行测试1.7.0.2.msysgit.0。
1.7.0.2.msysgit.0
git push我猜没有办法.git通过HEAD.
git push
如果您有权访问远程裸仓库,本文建议:
git symbolic-ref HEAD refs/heads/mybranch
这将更新存储库中的 HEAD 文件,使其包含:
ref: refs/heads/mybranch
如记录在git-symbolic-ref
git-symbolic-ref
请记住,像这样的命令git remote set-head:
git remote set-head
不会更改 远程 仓库的默认分支。 它只会将存储在 本地仓库中的 远程跟踪分支 更改为 __refs/remotes/<name>/HEAD
refs/remotes/<name>/HEAD
不会改变HEAD自己(再次,只有refs/remotes/<name>/HEAD),因此需要 git symbolic-ref.
git symbolic-ref
所以这里git remote set-head 不是 答案。 git symbolic-ref HEAD是,如果您可以直接访问远程仓库。
git symbolic-ref HEAD