我有一个裸存储库,用作我项目的中央存储.所有开发人员都git clone <repo>愿意与之分享.当他们进行克隆时,他们会检查主分支(除非他们这样做git clone -n)因为repo.git/HEAD包含ref: refs/heads/master,使其成为活动分支.
问题是,如何正确更改活动分支?我可以简单地直接破解repo.git/HEAD文件,但这看起来很讨厌,而且,哈哈.
我尝试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版本进行测试1.7.0.2.msysgit.0.
我猜测没有办法做到这一点git push,因为允许所有和各种更改你的默认分支似乎有点不安全(!),但肯定有一个更好的方法在repo .git目录中执行它比直接黑客HEAD文件.
Von*_*onC 268
如果您可以访问远程裸仓库,本文建议:
git symbolic-ref HEAD refs/heads/mybranch
Run Code Online (Sandbox Code Playgroud)
这将更新存储库中的HEAD文件,使其包含:
ref: refs/heads/mybranch
Run Code Online (Sandbox Code Playgroud)
如中所述 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是,如果您可以直接访问远程仓库.
小智 9
要更改分支,您需要更改对要使用的分支的 HEAD 引用。
首先通过执行以下操作列出裸存储库中的所有引用
$find ref
Run Code Online (Sandbox Code Playgroud)
然后找到您的分支的参考,格式如下refs/heads/<my_branch>。因此下一步是检查当前参考,只需键入:
$git symbolic-ref HEAD
Run Code Online (Sandbox Code Playgroud)
这样您就知道哪个是当前分支,然后根据需要更新它。
$git symbolic-ref HEAD refs/heads/<my_branch>
Run Code Online (Sandbox Code Playgroud)
就是这样。享受。