有的时候我们会遇到这样的场景,需要从其他仓库合并某个分支到现有仓库中。

之前实现这个需求我用了一个很智障的做法:把这个仓库需要的分支 copy 一份到本地仓库的临时分支上,然后进行 merge。

其实只要把想要同步的远程仓库设置为本地仓库的 upstream,就可以很方便地进行同步操作了。

什么是 upstream?

当你从 Github 上 clone 一个别人的 Repo 到本地,因为你不是 Repo 的成员,所以无法向 Repo 推送代码,此时对于本地仓库来说这个 Repo 就是 upstream。

当你把这个 Repo fork 后,再 clone 到本地,此时你 fork 到自己仓库的 Repo 就是本地仓库的 origin。

When a repo is cloned, it has a default remote called origin that points to your fork on GitHub, not the original repo it was forked from.

To keep track of the original repo, you need to add another remote named upstream

git remote add upstream git://github.com/user/repo_name.git

所以我们可以通过设置 upstream 来获取远程 Repo 的最新代码。

如何使用?

添加

1
$ git remote add upstream https://github.com/octocat/Spoon-Knife.git

查看

1
2
3
4
5
6
$ git remote -v 

origin ssh://xxx (fetch)
origin ssh://xxx (push)
upstream ssh://yyy (fetch)
upstream ssh://yyy (push)

取消

1
$ git branch --unset-upstream

拉取

覆盖本地的 master。

1
2
3
$ git fetch upstream
$ git checkout master
$ git rebase upstream/master

参考资料