我的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 ~$
答案 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 fetch
或git push
,Git会调用另一个Git。为此,您的Git需要其他Git的URL。您的Git不是让您一直输入git@bitbucket.org:myusername/dotfiles.git
,而是让您使用origin
之类的简短名称。 (您可以选择或更改名称; origin
只是您通过网址git clone
获得的默认值,因为您的克隆来源来自其他Git。)< / p>
此短名称是远程。它还用作每个远程跟踪名称的前缀,因为您可以添加多个远程,并且每个每个的每个 Git都有其自己的一组分支,所以为了让你的Git能够记住origin
和fred
的分支,你需要你的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 pull
与pull
相反吗?
嗯,不完全是:拉首先出现了,但有时会发生太多和/或错误的事情。因此它被分为push
,后跟fetch
或rebase
。在你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]
。