我正在尝试清理我的git存储库和
从命令行可以看到我的环境。
$ git remote
dev
origin
production
staging
$ git branch -r
dev/dev
origin/HEAD -> origin/master
origin/dev
origin/master
production/master
wpengine-findcra/master
$ git branch -vv
dev xxxxxxx <comment>
*master xxxxxxx [origin/master] <comment>
production/staging xxxxxxx [remotes/production/master] <comment>
staging/master xxxxxxx <comment>
我有4个工作地点。代码从1流到4.
我想专门为登台服务器添加一个新分支,现在我想让它镜像生产(主)分支。但我遇到了错误,我不知道该怎么做。
$ git checkout master
$ git branch staging
error: there are still refs under 'refs/heads/staging'
fatal: Failed to lock ref for update: Is a directory
我的代码在origin / master和dev / dev。
下是最新的答案 0 :(得分:10)
If you have a branch with a name that contains a slash, git will create (in .git/refs/heads
) a directory named like the name of your branch until the slash. In that directory it will place the refs for the branch itself. So the directory .git/refs/heads/staging/
exists and contains a file "master" due to your branch staging/master
.
When you try to create the branch "staging", git will try to create the file .git/refs/heads/staging
. As this already exists but is a directory, this will fail. Thus you cannot have two branches with these names in your repository.
In more recent versions of git the error message will look like this:
fatal: cannot lock ref 'refs/heads/staging': 'refs/heads/staging/master' exists; cannot create 'refs/heads/staging'