Git:在裸仓库中更改Active Branch的正确方法吗?

我有一个裸仓库,用作我的项目的中央存储。所有开发人员都git clone <repo>愿意与它分享。当他们进行克隆时,他们会git clone -n因为repo.git/HEAD包含而将master分支检出(除非这样做)ref: refs/heads/master,从而使之成为Active Branch

问题是,如何正确更改活动分支?我可以repo.git/HEAD直接直接破解文件,但这看起来很讨厌,而且很hacky。

我尝试git checkout <otherbranch>在repo .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 version进行测试1.7.0.2.msysgit.0

我猜测没有办法做到这一点git push,因为允许所有人和其他人更改您的默认分支似乎有些不安全(!),但是肯定有.git比直接修改HEAD文件更好的方法在repo 目录中。


幕布斯6054654
浏览 1200回答 3
3回答

米脂

如果您有权访问远程裸仓库,则本文建议您:git symbolic-ref HEAD refs/heads/mybranch它将更新存储库中的HEAD文件,使其包含:ref: refs/heads/mybranch如在 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是,如果您可以直接访问远程仓库。
打开App,查看更多内容
随时随地看视频慕课网APP