无法在远程 -- BitBucket 中找到远程 git 分支

Unable to find remote git branch in remote -- BitBucket

切换到新机器。我需要将从我的旧机器推送到远程的工作分支拉出来。但是我无法通过 git 命令找到远程分支。我可以在 BitBucket UI.

中看到分支

本次搜索全部未显示分支

git branch -all

但是我可以在 grep 搜索中看到我的分支

git ls-remote | grep "my_branch_name"

From ssh://git@my_org.com:xxxx/xxxx/xxx.git
ed18a***************************113aa4ac        HEAD
5b9a1***************************f4aa4f3a        refs/heads/feature/mybranch-10XX
704e2***************************2a4586d5        refs/heads/feature/mybranch-5XX

有没有办法把这些带到我的新本地?

你已经有了那些分支。他们被命名为 origin/feature/mybranch-10XXorigin/feature/mybranch-5XX.

不过,这些不是 分支机构。相反,它们是分支机构。如果你想在这些分支上工作,你需要从这些分支创建分支。如果这没有意义,那么您没看错:Git 过度使用分支这个词 以至于它失去了所有意义。 (参见 What exactly do we mean by "branch"?

为了理解这一点,停止将事物称为“分支”(或者至少,不要 只是 分支)。使用这些词:

  • remote-tracking 名称:类似于 origin/mainorigin/feature/mybranch-10XX;
  • 的名称
  • 分支名称(或“本地分支”,如果您愿意):名称如 mainfeature/mybranch-10XX;和
  • commit:由丑陋的大哈希 ID 标识的内容。

Git 将 找到 使用名称(分支名称和 remote-tracking 名称)提交的哈希 ID,以及然后将使用这些提交来查找更早的提交。使用这些名称(“分支”)找到的提交集也是一个“分支”。因此,根据一个人说“分支”时的意思,您要么拥有分支(提交集),要么拥有分支(remote-tracking 名称),或者没有分支(您缺少本地分支名称)。

幸运的是,如果您有一个 remote-tracking 名称,例如 origin/feature/mybranch-10XX,并且您要求 Git 切换到(本地)分支名称:

git switch feature/mybranch-10XX

并且该分支名称 尚不存在 ,这将调用 --guess 选项,默认情况下处于启用状态:git switchgit checkout 的意思是 git switch --guess or git checkout --guess.1 猜码截取Git [=46的错误=] 会给出 ,如果你使用 --no-guess。 Git本来about说了句大意是没有本地feature/mybranch-10XX,但是后来猜码截获了错误。猜测代码会扫描您的 remote-tracking 名称以寻找匹配的名称(在本例中剥离 origin/ 部分之后)。如果它找到一个,它 创建 一个新的 (本地)分支名称 从 remote-tracking 名称,识别 同样的提交。该提交现在“在”(本地)分支 “在”remote-tracking 名称上。它也可能在许多其他分支上:提交通常同时在许多分支上,在 Git.

无论如何,既然git switchgit checkout已经使用猜码创建了分支名称,Git就可以切换了那个分支。您现在将检查特定的 commit 并可以开始进行更改并使用它们进行新的提交。


1如果您不想希望Git猜测,请使用--no-guess关闭此功能。在 Git 的现代版本中,您还可以将其作为配置选项默认禁用。