git获取到不同的本地远程refspec

时间:2017-12-26 20:14:31

标签: git

我的远程起源只有主分支。

然后我做了:

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.

1 个答案:

答案 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 OPthe comments所述,“ Git Internals - The Refspec ”这一章确实包括:

  

如果您只想进行一次性提取,您也可以在命令行中指定特定的refspec。
  要将遥控器上的master分支向下拉到origin/mymaster,您可以运行:

$ git fetch origin master:refs/remotes/origin/mymaster