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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git:在裸存储库中更改Active Branch的正确方法?相关的知识,希望对你有一定的参考价值。

我有一个裸存储库,用作我项目的中央存储。所有开发人员都会与git clone <repo>分享。当他们做克隆时,他们会得到主分支的结账(除非他们做git clone -n),因为repo.git/HEAD包含ref: refs/heads/master,使其成为活动分支。

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

我尝试在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文件。

答案

如果你有权访问远程裸仓库,这个article suggests

git symbolic-ref HEAD refs/heads/mybranch

这将更新存储库中的HEAD文件,使其包含:

ref: refs/heads/mybranch

git-symbolic-ref中所述


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

另一答案

要更改分支,您需要将HEAD引用更改为要使用的分支。

首先列出裸存储库中的所有引用

$find ref

然后找到你的分支的参考,格式将如下refs/heads/<my_branch>。所以下一步是检查当前参考,只需输入:

$git symbolic-ref HEAD

所以你知道哪个是当前分支然后根据需要更新它。

$git sumbolic-ref HEAD ref/heads/<my_branch>

而已。请享用。

另一答案

那个瓷器命令git reset --soft <branch_name>在裸存储库里面的git服务器上怎么样?它也必须改变HEAD。

另一答案

此外,如果您无法访问裸存储库,那么通过执行git remote set-head就可以了

看到这个以前的response

另一答案

我在我们的服务器上也有一个裸仓库,并且能够使用成功检索文件

git clone //server/repo/directory -b branch_name

进入一个新的本地存储库,即使该联机帮助页说这只适用于非裸存储库。

另一答案

我在申请之前和之后比较了两个目录

git symbolic-ref HEAD refs/heads/mybranch

并且似乎只有repo.git / HEAD文件被更改,所以可能只是“破解”文件是非常安全的。

以上是关于Git:在裸存储库中更改Active Branch的正确方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Git 分支移到其自己的存储库中?

如何丢弃 GIT 存储库中未经检查的更改 [重复]

如何在 Git proto 存储库中发布对共享 .proto 文件的更改?

text 还原本地git存储库中的文件权限更改

如何还原某些用户在 GIT 存储库中所做的更改

[git] git 分支( branch ) 的基本使用