我的远程起源只有主分支。
然后我做了:
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)
予。我的第一个问题是为什么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.
答案 0 :(得分:0)
请参阅我之前的回答“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