git branch --all不显示远程分支

时间:2017-11-09 01:27:35

标签: git bitbucket

我的dotfiles有一个git repo,我就这样使用了 100 ~$ git --git-dir=$HOME/.cfg/ --work-tree=$HOME [command] 当我列出我的分支时,我希望看到另一个分支* origin/master,但它不会出现 101 ~$ git --git-dir=$HOME/.cfg/ --work-tree=$HOME branch --all * master 在我找到的大多数其他论坛帖子中,这通常是通过添加遥控器来解决的,但我的遥控器已经添加了。 remote show origin确认:
102 ~$ git --git-dir=$HOME/.cfg/ --work-tree=$HOME remote show origin * remote origin Fetch URL: git@bitbucket.org:myusername/dotfiles.git Push URL: git@bitbucket.org:myusername/dotfiles.git HEAD branch: master Local branch configured for 'git pull': master merges with remote master Local ref configured for 'git push': master pushes to master (up to date) 此外,当我创建提交时,我可以将它们推送到我的遥控器上,没有任何问题。那么究竟是什么origin/master分支,为什么它似乎自动出现在我曾经使用过的其他本地git回购中,为什么不在这种情况下呢?

编辑:我在终端中添加了一些输出,以澄清什么不起作用 619 ~$ git --git-dir=$HOME/.cfg/ --work-tree=$HOME fetch origin From https://bitbucket.org/myusername/dotfiles * branch master -> FETCH_HEAD 620 ~$ git --git-dir=$HOME/.cfg/ --work-tree=$HOME push origin master Everything up-to-date 621 ~$ git --git-dir=$HOME/.cfg/ --work-tree=$HOME branch -a * master 622 ~$ git --git-dir=$HOME/.cfg/ --work-tree=$HOME branch -r 623 ~$

2 个答案:

答案 0 :(得分:2)

您很可能只需要运行:

git fetch origin

(或者甚至只是git fetch):在Bitbucket上调用Git并让Bitbucket Git与你的Git交谈,并将它们发送给你。或者您可能需要运行:

git push origin master

让你的Git打电话给他们的Git并在"其他方向"进行类似的谈话。你的Git会向你发送你master上他们没有提交的任何提交,然后礼貌地问他们,#34;非常好,如果它可以" - 设置他们的master到你的分支的同一个提交。

发生了什么

Git术语令人困惑。名称origin/master不是分支名称;它是一个远程跟踪分支名称。就像这对单词"分支名称"通常缩短为" branch",短语远程跟踪分支名称通常缩短为"远程跟踪分支"。我一直在尝试使用"远程跟踪名称"相反,因为远程跟踪名称根本不是分支。特别是,您无法获得""远程跟踪名称,您可以获得" on"分支...虽然您可以让Git直接创建远程跟踪名称,但您不应该这样做。

这些远程跟踪名称的目的是让你的Git记住他们的 Git所说的他们所拥有的,上一次是你的Git与他们的Git交谈。所以你应该让你的Git调用他们的Git。然后两个Gits可以交谈,你的可以创建,更新甚至修剪"这些远程跟踪的东西。

运行git fetchgit push,Git会调用另一个Git。为此,您的Git需要其他Git的URL。您的Git不是让您一直输入git@bitbucket.org:myusername/dotfiles.git,而是让您使用origin之类的简短名称。 (您可以选择或更改名称; origin只是您通过网址git clone获得的默认值,因为您的克隆来源来自其他Git。)< / p>

此短名称是远程。它还用作每个远程跟踪名称的前缀,因为您可以添加多个远程,并且每个每个每个 Git都有其自己的一组分支,所以为了让你的Git能够记住originfred的分支,你需要你的Git在origin/master下存储一个内存而在{{1}下存储另一个内存。 1}}。当然,如果你只有一个遥控器,那就太过分了,但无害。

无论如何,fred/master让他们向您发送他们所有的分支机构名称,然后您的Git会下载他们没有的任何提交,并设置您的git fetch origin名称以匹配他们的名。同样地,origin/*让你的Git向他们发送他们没有做过的新提交 - 然后要求他们将git push origin <name>设置为与您的<name>相同。请注意,此处没有任何时髦的重命名:您要求他们设置,而不是他们的<name>。因此,推送并不完全与获取完全相反,它与Git相反接近。

关于jason/master

的附注

git pull怎么样?不应该git pullpull相反吗?

嗯,不完全是:拉首先出现了,但有时会发生太多和/或错误的事情。因此它被分为push,后跟fetchrebase。在你merge之后,你经常 - 但不总是 - 想要将你从另一个Git得到的任何东西整合到你自己的分支中。此时,您将需要第二个Git命令。使用git fetch将为您运行这两个命令。这基本上就是它所做的一切,你可以做到这一点,但直到你熟悉每个单独命令的工作原理 - 更重要的是,他们如何有时失败,以及如何处理它 - 我发现坚持使用底层命令会更好。否则,git pull可能会使两个命令中的一个失败,然后您就不知道哪个命令失败了,更不用说该怎么办了。

答案 1 :(得分:0)

正如torek在答复中指出的那样,修复是设置remote.origin.fetch。我运行[git] config --edit并更改了相关部分

...
[remote "origin"]
    url = https://myusername@bitbucket.org/myusername/dotfiles.git
[status]
...

...
[remote "origin"]
    url = https://myusername@bitbucket.org/myusername/dotfiles.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[status]
...

在此之后,正在运行[git] status通知我     在分支大师     您的分支机构基于&origin; master&#39;,但上游已经消失。

然后在运行[git] push后,当我运行[git] status[git] branch -r

时,我终于看到了遥控器

*为了简单起见,我在我的仓库中实际运行了git --git-dir=$HOME/.cfg/ --work-tree=$HOME,我在上面的文字中将其缩短为[git]