20

我已经分叉了一个 repo,我所有的工作都进入了那个 fork(我的起源),我将上游分支与拉取请求合并。很标准。

但是现在上游仓库中有一个新分支,我不太清楚如何在本地获取该新分支,然后将其推送到我的原点。这是我的情况。

$ git remote show origin
* remote origin
  Fetch URL: git@github.com:rackspace/jclouds.git
  Push  URL: git@github.com:rackspace/jclouds.git
  HEAD branch: master
  Remote branches:
    1.5.x                   tracked
    master                  tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

$ git remote show upstream
* remote upstream
  Fetch URL: https://github.com/jclouds/jclouds
  Push  URL: https://github.com/jclouds/jclouds
  HEAD branch: master
  Remote branch:
    master tracked
  Local ref configured for 'git push':
    master pushes to master (up to date)

我知道 jclouds/jclouds 中有一个 1.6.x 分支,我想在本地获取该分支,然后将其推送到 rackspace/jclouds。我试过这个命令

$ git fetch upstream 1.6.x
From https://github.com/jclouds/jclouds
 * branch            1.6.x      -> FETCH_HEAD

看起来它已经获取了分支,但我没有看到它,git remote show所以git branch -a我无法设置本地跟踪分支。

我错过了什么?

4

1 回答 1

29

这应该足够了

# I prefer fetching everything from upstream
git fetch upstream

# Then I track the new remote branch with a local branch
git checkout -b 1.6.x --track upstream/1.6.x
git push origin 1.6.x

如果有更新问题,例如:

fatal: Cannot update paths and switch to branch '1.6.x' at the same time. 
Did you intend to checkout 'upstream/1.6.x' which can not be resolved as commit?"

如果这也不起作用:

git checkout upstream/1.6.x -b 1.6.x

然后一个更简单的版本是:

# let's create a new local branch first
git checkout -b 1.6.x
# then reset its starting point
git reset --hard upstream/1.6.x

OP Everett Toews在他的案件中必须做的是:

最终我不得不明确地添加上游分支

git remote add --track 1.6.x upstream-1.6.x https://github.com/jclouds/jclouds 

进而:

git pull upstream-1.6.x 1.6.x
于 2013-03-31T15:46:22.910 回答