我这样做了:
git branch --track stats_page
创建一个单独的分支来尝试一些东西。但是现在我每次推或拉都会看到:
$ git pull
From .
* branch master -> FETCH_HEAD
和
$ git push
Total 0 (delta 0), reused 0 (delta 0)
To .
ff0caf5..e360168 stats_page -> master
我远离git master,所以我可能会错过了解正在发生的事情 - 但是我的stats_page分支跟踪掌握了吗?
我可能创建了错误的分支 - 如果是这样 - 我可以修复它,以便从现在开始推送并拉到远程stats_page分支吗?怎么样?
答案 0 :(得分:3)
快速回答:解决此问题的最简单方法是Make an existing Git branch track a remote branch?
我总是发现git的“追踪分支”的描述让我自己感到困惑。至少对他们来说,他们听起来比他们做的要多得多。
我认为,技巧是要意识到git根本不会实际“跟踪”远程存储库。 (它从远程仓库中获取。)而是,“跟踪分支”跟踪您自己的仓库中的分支 。要“跟踪远程分支”,您需要创建一个分支,其名称表示它最初是从其他某个仓库复制的。 (在封面下,这意味着存储在refs/remotes/
下的任何分支,或多或少。)最常见的“其他仓库”是名为origin
的分支,它是初始git clone
的分支。为你设定。正如它在git-clone手册页中所述:
此默认配置是通过在
refs/remotes/origin
下创建对远程分支头的引用并初始化remote.origin.url
和remote.origin.fetch
配置变量来实现的。
当您使用git branch --track
创建分支时,它会使新分支“跟踪”您提供的“起点”。 (并且,“跟踪”主要是指“关联进行各种推/拉/获取操作,并在运行git status
时告诉我更多信息。”因此,假设您克隆的回购已经有stats_page
分支,您可能意味着来执行此操作:
git branch --track stats_page origin/stats_page
告诉git“创建一个名为stats_page
的新分支,跟踪我在refs/remotes/origin/stats_page
中的内容”(您通常会忽略refs/heads
和refs/remotes
部分,以及git数字他们出去)。你甚至不需要--track
,因为右边的origin/
部分会为你打开。
一旦你完成了所有这些,用git的术语,你有一个“本地”分支(refs/heads/stats_page
)跟踪一个“远程”分支(refs/remotes/origin/stats_page
)。要实际更新“远程”分支,请使用git fetch
,或更明确地使用git fetch origin
,它会转到与origin
关联的网址并收集任何新内容,然后将其添加到您的回购。因此,尽管称之为“远程”,它仍然非常本地化:它就在你自己的本地磁盘上。
(我已经开始称git为“SCM的Borg”:“我们是git-Borg。我们将为您自己添加您的提交独特性。”您所做的大部分内容都会为您自己的回购添加新内容博格集体。)
使用git fetch
更新“远程”分支(origin/stats_page
)的本地副本后,您可以执行git merge
将其合并到{stats_page
1}},没有origin/
部分的名称)。并且,git pull
只是在一个简单的步骤中运行这两个 - 这隐藏了实际从“远程”获取新内容的fetch
这一事实
现在,您遇到的问题是:当您运行时:
git branch --track stats_page
您在master
分支上,因此您创建了一个名为stats_page
的新“本地”分支,用于跟踪您的master
,而不是跟踪origin/stats_page
。因此,git pull
和git push
只需拉动并推送名为master
的本地分支。 (注意:如果您实际运行git fetch
,仍然会进入remotes/origin/*
,因此它仍会更新origin/stats_page
,即使一个“本地”分支错误地跟踪另一个“本地”分支。 )
最后一点:通常当您创建一个跟踪同名远程分支的“本地”分支时,您还需要立即执行git checkout
。您只需git checkout -b stats_page origin/stats_page
即可完成所有三个步骤。 (如果你的git版本是旧的,它可能不会在你右边命名origin/stats_page
时自动跟踪;但如果是这样你可能只是更新你的git版本。)
git pull
,我有点同意。 git pull
确实混合了两种截然不同的操作。特别是git pull remote_A remote_B
似乎让人们在进行章鱼合并时会感到惊讶。使用git fetch
似乎永远不会让人感到惊讶;一旦他们习惯并熟悉一个明确的git merge
,快进合并背后的逻辑就会更有意义。但是,没有参数的git pull
非常方便....
答案 1 :(得分:1)
在文本编辑器中打开.git / config,然后查找类似的内容:
push = stats_page:master
您可能会在远程部分(而不是您的分支机构)中找到类似的内容。
您可以将其删除。默认情况下,推拉操作会推送/拉出所有匹配的名称。 push选项使得您可以将本地分支推送到具有不同名称的远程分支。
请查看分支的部分,您可能需要在那里调整“合并”选项。