我的远程起源只有主分支。
然后我做了:
git fetch origin refs/heads/master:refs/remotes/origin/master2
结果我得到了:
* [new branch] master -> origin/master2
这似乎没事。
它显示为与主站的远程跟踪分支:
bash$ git branch -r
origin/HEAD -> origin/master
origin/master
origin/master2
但是master2显示为:
bash$ git remote show origin
Remote branches:
master tracked
refs/remotes/origin/master2 stale (use 'git remote prune' to remove)
I.我的第一个问题是为什么master2显示为陈旧?我能够获取它(并创建它作为我的本地远程跟踪),我希望它将映射到远程源/主?
II。第二个问题是我必须做的事情:
bash$ git branch -r -d origin/master2
删除它并在尝试通过提供完整的refspec时出错:
bash$ git branch -r -d refs/remotes/origin/master2
error: remote-tracking branch 'refs/remotes/origin/master2' not found.
我检查了git-branch的人,发现分支名称没有什么特别之处:
<branchname>
The name of the branch to create or delete. The new branch name
must pass all checks defined by git-check-ref-format(1). Some of
these checks may restrict the characters allowed in a branch name.
请参阅我之前的回答“What is a “stale” git branch?”:您正在创建一个本地master
分支,跟踪名为master2
的远程分支。
但是在master2
回购中不存在origin
。
因此陈旧的属性。
fetch不从远程不存在的分支master2
获取任何提交,但确实创建了一个跟踪master
的本地origin/master2
分支,这意味着下一个git push
将推送(和创建)origin/master2
。
正如我mention here,一个简单的git fetch origin -p --progress
将删除origin/master2
。
正如the OP在the comments中提到的那样,“Git Internals - The Refspec”这一章确实包括:
如果要进行一次性提取,也可以在命令行中指定特定的refspec。 要将遥控器上的
master
分支在本地拉到origin/mymaster
,您可以运行:
$ git fetch origin master:refs/remotes/origin/mymaster