我有一个裸存储库,用作我项目的中央存储。所有开发人员都git clone <repo>
与之分享。当他们进行克隆时,他们会检查主分支(除非他们git clone -n
),因为repo.git/HEAD
包含ref: refs/heads/master
,这使得 Active Branch 。
问题是,如何正确更改 Active Branch ?我可以简单地直接破解repo.git/HEAD
文件,但这看起来很讨厌,而且很糟糕。
我尝试在repo 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
文件,但它将其设置为refs/heads/otherbranch
指向的提交的SHA1。
我正在使用git版本1.7.0.2.msysgit.0
进行测试。
我猜测没有办法通过git push
执行此操作,因为允许所有和各种更改默认分支似乎有点不安全(!),但肯定有更好的方法在repo中执行此操作.git
目录,而不是直接攻击HEAD
文件。
答案 0 :(得分:259)
如果您有权访问远程裸仓库,请article suggests:
git symbolic-ref HEAD refs/heads/mybranch
这将更新存储库中的HEAD文件,使其包含:
ref: refs/heads/mybranch
中所述
如果您无权访问远程仓库,请参阅my previous answer。
请记住git remote set-head
之类的命令:
不会更改远程回购的默认分支。
它只会将本地回购中存储的远程跟踪分支更改为refs/remotes/<name>/HEAD
不会更改HEAD
本身(仅限refs/remotes/<name>/HEAD
),因此需要
git symbolic-ref
所以git remote set-head
不是这里的答案
git symbolic-ref HEAD
是,如果您可以直接访问远程仓库。
答案 1 :(得分:3)
要更改分支,您需要将HEAD引用更改为要使用的分支。
首先通过执行
列出裸存储库中的所有引用$find ref
然后找到您的分支的参考,格式如下refs/heads/<my_branch>
。所以下一步是检查当前参考,只需输入:
$git symbolic-ref HEAD
因此您知道哪个是当前分支,然后根据需要更新它。
$git sumbolic-ref HEAD ref/heads/<my_branch>
是的,它就是它。享受。
答案 2 :(得分:0)
在裸仓库中的git服务器上的瓷器命令git reset --soft <branch_name>
呢?它也必须更改HEAD。
答案 3 :(得分:0)
如何正确更改活动分支?
状态: repo .git目录中的git checkout 退货 致命的:此操作必须在工作树中运行
提示: 只需添加--work-tree参数
详细示例: 假设: 远程服务器上的裸git:
〜/ bare_git_repository.git 独立工作树: / var / www / myappremote
在本地服务器上: 创建分支version.1.7(我们的其他分支)
git branch version.1.7
git push原始版本1.7
在具有git raw repo的远程服务器上:
$ cd〜/ bare_git_repository.git
$ git分支
如前所述,遵循命令
git checkout version.1.7
返回
致命:此操作必须在工作树中运行
使用以下命令
git --work-tree = / var / www / myappremote签出版本。1.7
成功更改活动分支
$ git分支
大师
使用以下命令检查结果
ll / var / www / myappremote
希望这会有所帮助
答案 4 :(得分:-1)
此外,如果您无法访问裸存储库,请执行git remote set-head
并完成
请参阅此前response
答案 5 :(得分:-3)
我的服务器上还有一个裸仓库,并且能够使用
成功检索文件git clone //server/repo/directory -b branch_name
进入一个新的本地存储库,即使该联机帮助页说这只适用于非裸存储库。
答案 6 :(得分:-4)
我在应用
之前和之后比较了两个目录 git symbolic-ref HEAD refs/heads/mybranch
并且似乎只有repo.git / HEAD文件被更改,所以可能只是“破解”文件是非常安全的。