在git update remote之后,新的上游分支是可见的,但不是源分支
首先,我的术语是:“上游”是最初的ApacheRepo(在github上)。“origin”是我的apacherepo分支(也在github上) 执行以下操作后:在git update remote之后,新的上游分支是可见的,但不是源分支,git,Git,首先,我的术语是:“上游”是最初的ApacheRepo(在github上)。“origin”是我的apacherepo分支(也在github上) 执行以下操作后: git remote update git fetch 我看到ApacheRepo引用更新为包含两个新分支 [cloudera@localhost delta]$ git remote update Fetching origin Fetching upstream remote: Counting objects: 58, don
git remote update
git fetch
我看到ApacheRepo引用更新为包含两个新分支
[cloudera@localhost delta]$ git remote update
Fetching origin
Fetching upstream
remote: Counting objects: 58, done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 58 (delta 6), reused 48 (delta 6)
Unpacking objects: 100% (58/58), done.
From https://github.com/apache/spark
7e4a0e1..b060014 branch-0.9 -> upstream/branch-0.9
1a0a2f8..952e0d6 branch-1.0 -> upstream/branch-1.0
* [new branch] branch-1.1 -> upstream/branch-1.1
注意从上游创建的[新分支]。我不必做“git分支-b”。但是的起源的新分支(有几个分支)呢?为什么这里的行为不同
在此克隆中未获取/创建我的本地repo(在单独的本地克隆中创建)上的任何新分支
那么,如何获取原始版本中的新分支呢
根据@VonC的建议更新
git branch -avvv
输出不显示原始分支
delta
* master
master
remotes/origin/HEAD
remotes/origin/branch-0.5
..
remotes/origin/delta
remotes/origin/docs st
remotes/origin/strlen
remotes/upstream/branch-0.5
..
remotes/upstream/branch-1.1
remotes/upstream/master
..
所以我的困惑看起来更像是一个基本的/初学者的困惑:为什么
$ git branch
delta
* master
对于eampe remotes/origin/docs不显示。。我想我需要在这里更多地阅读git分支命令
另一个更新@AD7Six在他的回答中进一步解释了git分支与git分支的关系-r您需要从ustream本地获取,然后将这些分支推到您的分支(
origin
)
本地repo(fork的克隆)是从上游获取新提交/分支并将其发布到源站的中间点。从一个GitHub repo到另一个GitHub repo没有“直接复制” 要从源代码获取您自己的分支,git fetch就足够了,请检查:
git branch -avvv
然后,您可以使用一行命令从获取的远程跟踪分支创建本地分支:请参阅“”
“git远程更新”自动在远程上游(apache)上找到新分支。
我不必做“
git checkout-b
”来创建它们
那么,为什么上游和源头之间的行为存在差异呢
您应该看到相同的git agit fetch
(或git fetch origin
):如果它们是git分支-avvv
的结果,但不是由下一次git远程更新
获取的,则意味着它们已经存在于本地克隆中
在这两种情况下(上游或起点),这些分支都是远程跟踪分支,如git branch-r
(r
表示远程)
您可以通过比较以下列表进行检查:
- 本地分行:
git分行
- 远程(跟踪)分支:
git分支-r
更多信息请参见: 这将显示已下载的分支: 在下图中,来自这些新远程分支的提交显示为正方形而不是圆形。
如您所见,
git fetch
允许您访问另一个存储库的整个分支结构
您看到的“创建”分支注册在“
remotes
”命名空间中(在OP案例中,“remotes/upstream
”一个)从远程获取只会更新远程引用,例如origin/master
之类的分支。Git不会自动创建可用于更新远程分支的本地分支
要从任何远程分支创建本地分支,您需要执行以下操作-
git checkout -b newLocalBranch <remote_name>/<remote_branch_name>
git签出-b newLocalBranch/
现在,据说分支newLocalBranch正在跟踪存储库中的分支。因此,您现在可以处理本地newLocalBranch,并使用它将新提交推送到远程分支,使用-
git push <remote_name> newLocalBranch:<remote_branch_name>
git-push-newLocalBranch:
Git branch仅显示本地分支
不带参数运行git branch
,将仅显示本地分支:
-> git branch
* develop
master
要仅显示远程分支,请使用--remote
(或-r
)选项:
要显示所有分支,请使用--all
(或-a
)选项:
所有命令都可以与详细选项结合使用,以获取更多信息:
-> git branch -vv
* develop 5cb42f9 [origin/develop: ahead 3] make logging configurable
master 77de2a8 [origin/master: ahead 7] Merge branch 'develop'
有关分支命令参数的更多信息,请参见您所说的“我的本地repo(在单独的本地克隆中创建的)上没有一个新分支是在此克隆中获取/创建的”到底是什么意思?您希望看到什么?我正在尝试将远程源存储库中创建的分支提取到本地克隆中。如果“git远程更新”不是正确的方法,那么请推荐一种。嗨,VonC。显然我的问题还不够清楚。在我自己的远程fork上有几个分支,我正试图将它们提取到另一个(本地)克隆中。这里没有“推送”。@javadba好的,我添加了一个链接,用于从您拥有的远程设备创建本地brnachefetched@javadba我编辑了答案以解决行为的差异。我更新了OP以显示“git远程更新”的输出:它清楚地显示了从上游创建新分支。@javadba这应该是只创建远程跟踪分支,而不是本地分支。使用
git branch
与git branch-r
检查。这就是我在回答的最后一部分所说的,正如OP中提到的,“git远程更新”会自动在远程上游(apache)上找到新的分支。我不必使用“git checkout-b”来创建它们。那么,为什么上游和源头之间的行为存在差异呢?@AD7six谢谢,更正了术语@javadba获取时,您没有创建本地分支。您只是要求git更新远程引用。如果您必须创建一个本地分支,您应该执行一个git checkout-b
。很可能你只是看到远程引用被更新了。@javadba你能在你的问题中粘贴.git/config文件的内容吗,至少与上游和源站相关的详细信息。OP已更新,以显示新分支1.1是从上游自动创建的-但没有从源站创建任何新分支。@jav
git push <remote_name> newLocalBranch:<remote_branch_name>
-> git branch
* develop
master
-> git branch --remote
origin/HEAD -> origin/master
origin/develop
origin/master
-> git branch --all
* develop
master
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/master
-> git branch -vv
* develop 5cb42f9 [origin/develop: ahead 3] make logging configurable
master 77de2a8 [origin/master: ahead 7] Merge branch 'develop'