如何追踪远程Git分支?

6

我有一个git仓库,里面有两个分支:mastermybranch。 在从git仓库克隆到本地文件夹之前,我只能看到第一个分支,也就是预期中的情况:

xxx$ git branch
* master

为了获取另一个分支,我尝试了以下操作:

xxx$git branch --track mybranch

这将返回

Branch origin/mybranch set up to track local branch master

这不是我想要的,因为从现在的理解来看,我的本地分支mybranchmaster相同(对吗?)。

所以我有两个问题:

  • 如何删除本地分支?

  • 如何真正获取远程分支mybranch

编辑 我不想检出mybranch,我只想获取它。

编辑2

在我创建该分支的工作区w2中(我克隆了repos,创建了mybranch并推送它:

$ git branch -vv
  master    c417738 [origin/master] <latest commit msg>
* mybranch 0c7dbac <latest commit msg>

在最初的工作区 w1 中(在此处我首次推送了 master)。
$ git branch -vv
* master 66bb412 <latest commit msg>

现在,如果我在w1中进行一个fetch操作:
$ git fetch

我还只有master分支:
$ git branch -vv
* master 66bb412 <latest commit msg>

但是如果我检查我的远程分支,mastermybranch都存在:

$ git branch -r
  origin/master
  origin/mybranch

所以,正如我所预料的那样,fetch没有从所有分支获取数据...

编辑3

现在,按照Klas Mellbourn的指示,我进行了以下操作:

git branch mybranch

我将以下行添加到我的配置文件中:

[branch "mybranch"]
remote = origin
merge = refs/heads/mybranch

现在检查我的分支,我得到:

$ git branch -vv
* master    66bb412 <latest commit msg>
  mybranch 66bb412 [origin/mybranch: ahead 3, behind 8] <latest commit msg from master (?)>

为什么在 mybranch 分支中指定的提交与 master 分支相同?并且为什么它指定了与 master 相同的提交号码?
1个回答

8
我认为你实际上可能已经做到了。
git branch --track origin/mybranch

创建了一个名为origin/mybranch的本地分支,它有点令人困惑,它跟踪您当前所在的本地分支。

删除该分支。

git branch -d origin/mybranch

获取远程分支,只需执行以下操作:

git checkout mybranch

应该返回

Branch mybranch set up to track remote branch mybranch from origin.
Switched to a new branch 'mybranch'

如果不行,您可以这样做。
git checkout -b mybranch
git branch -u origin/mybranch

(或者更简洁的 git checkout -t origin/mybranch,正如 VonC 在他的回答中建议的那样)
如果你不想检出新分支,可以执行以下操作:
git branch mybranch
git branch -u origin/mybranch mybranch

如果你正在使用没有-u开关的git 1.7版本,且绝对不想检出跟踪分支,我认为你无法使用命令行创建它,但是你可以直接编辑配置文件来创建。

git branch mybranch
git config --local --edit

然后添加这些行。
[branch "mybranch"]
    remote = origin
    merge = refs/heads/mybranch

提示:您可以学习 git branch -vva 的输出,以了解您的分支情况。

你对实际分支名称是正确的。我尝试了 git checkout mybranch,但出现了以下错误:error: Your local changes to the following files would be overwritten by checkout: <list of files>。我只想获取该分支,而不想更改当前分支(master)。这是否可能? - jul
好的,根据您的评论描述,似乎我必须先在本地创建 mybranch 分支,然后让它跟踪远程 mybranch 分支,对吗?没有办法让 Git 获取所有远程分支的数据吗?无论如何,我尝试了 git branch --set-upstream mybranch origin/mybranch(我正在使用 Git 1.7,因此不存在 -u 选项),然后执行了 git fetch,但是本地的 mybranch 分支似乎仍与远程分支不同:我尝试了 git diff master..mybranch,但它没有显示任何差异。 - jul
如果mybranch在本地存在,为什么使用git branch命令无法看到它,而需要使用git branch mybranch来创建它呢? - jul
1
@jul origin/mybranch 可以通过 git branch -r 命令查看。您不允许直接修改远程分支。远程分支应该包含远程存储库内容的副本。您可以创建本地分支进行本地更改,然后将这些更改推送到远程存储库,相同的更改会被复制到您自己的远程分支。这是一个很好的解释:http://www.gitguys.com/topics/tracking-branches-and-remote-tracking-branches/ - Klas Mellbourn
我在本地存储库中没有进行任何更改。无论如何,我需要更多地了解git,因为事情可能会变得混乱。感谢您的帮助。 - jul
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接