Skip to content
On this page

fork项目同步更新

当我们 fork 一个开源仓库之后,应该怎样将上游的仓库同步到我们的 fork 上呢?

为复刻配置远程仓库

必须在 Git 中配置指向上游存储库的远程存储库,才能将你在分支中所做的更改同步到原始存储库。 这也允许您将在原始仓库中所做的更改同步到复刻中。

1. 打开终端。

2. 列出当前为复刻配置的远程仓库。

sh
$ git remote -v
> origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
> origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
1
2
3

3.指定将与分支同步的新远程上游存储库。

sh
$ git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
1

4.验证为复刻指定的新上游仓库。

sh
$ git remote -v
> origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
> origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
> upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
> upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)
1
2
3
4
5

5.从上游仓库中获取分支和它们各自的 commits。将 BRANCHNAME 上的 commit 存储在本地分支 upstream/BRANCHNAME 上。

sh
$ git fetch upstream
> remote: Counting objects: 75, done.
> remote: Compressing objects: 100% (53/53), done.
> remote: Total 62 (delta 27), reused 44 (delta 9)
> Unpacking objects: 100% (62/62), done.
> From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY
>  * [new branch]      main     -> upstream/main
1
2
3
4
5
6
7

6.切换你fork的本地默认分支(在本例中,我们使用 main )。

sh
$ git checkout main
> Switched to branch 'main'
1
2

7.将上游默认分支(在本例中为 upstream/main )中的更改合并到本地默认分支中。这将使fork的默认分支与上游存储库同步,而不会丢失本地更改。

sh
$ git merge upstream/main
> Updating a422352..5fdff0f
> Fast-forward
>  README                    |    9 -------
>  README.md                 |    7 ++++++
>  2 files changed, 7 insertions(+), 9 deletions(-)
>  delete mode 100644 README
>  create mode 100644 README.md
1
2
3
4
5
6
7
8

8.如果你本地没有任何提交,Git 将改为执行 fast-forward

sh
$ git merge upstream/main
> Updating 34e91da..16c56ad
> Fast-forward
>  README.md                 |    5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
1
2
3
4
5

注意

同步你的 fork 仅仅只是更新了本地上对仓库的拷贝。如果要更新 GitHub 上你的 fork,则必须推送这些更改。

sh
$ git push
1