小编典典

Git:在裸存储库中更改活动分支的正确方法?

all

我有一个裸存储库,用作我的项目的中央存储。所有的开发人员都会git clone <repo>与它分享。当他们进行克隆时,他们会签出 master
分支(除非他们这样做git clone -n),因为repo.git/HEADcontains 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.


阅读 61

收藏
2022-06-15

共1个答案

小编典典

如果您有权访问远程裸仓库,本文建议

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是,如果您可以直接访问远程仓库。

2022-06-15