git fetch远程分支和远程ref

时间:2012-12-18 07:07:49

标签: git

如何在不影响当前分支的情况下获取远程分支并更新该分支的git的本地引用?例如,如果我这样做

$ git pull origin master

origin / master合并到我当前的分支中。这也行不通

$ git fetch origin master

那时我检查

$ git branch -r -v
origin/HEAD   -> origin/master
origin/master 7cf6ec5 test 02

原点/主参考“7cf6ec5 test 02”落后。真正的起源/主人是“XXXXXX测试03”。 git fetch仅将更改拉入FETCH_HEAD,但未上传本地origin / master ref。更新该参考的步骤是什么?

注意:

$ git fetch origin

将获得所有远程引用并更新它们但不幸的是(a)很多混乱。 (我不希望别人的30-50个随机分支知道有人不想要我的)和(b)因为分支在原点被删除,所以当我下次git fetch origin时,这些引用不会被本地删除这意味着这条道路最终会残留。

问题是,如何只获取一个分支并在本地更新其参考?

3 个答案:

答案 0 :(得分:6)

我认为我正在寻找的是这个

$ git fetch origin master:refs/remotes/origin/master

这似乎与'git fetch origin master'不同,我确实看到ref更新了。

任何理由都是错误的答案?我应该害怕什么?

答案 1 :(得分:1)

git fetch origin

这将获取所有远程分支并为它们更新远程跟踪分支。

现在你可以做两件事之一

git checkout other-branch
git merge origin/other-branch
git checkout -

git push . origin/other-branch:other-branch

如果您知道它将是一个快速合并,那么最后一个选项就可以了。

答案 2 :(得分:0)

您始终可以为git fetch命令提供refspec。特别是,如果您想要更新other-branch,您可以执行以下操作:

git fetch origin other-branch:other-branch

这将从原点获取refs/heads/other-branch的当前提示,并将其放入同名的本地分支。

另一种方式是继续前进:

git fetch origin other-branch

然后重新创建本地分支:

git branch -l -f other-branch -t origin/other-branch

-l是一种安全机制。它将创建一个reflog条目,以便您可以在需要时返回到以前的版本。