以写作调身心

Git如何更新fork后的repository

问题描述

有一个仓库A,我经过fork后变成了仓库B,当仓库A已经有了新提交时,我需要更新仓库B,该怎么办呢?

解决

1,首先,检查一下当前的配置,看看当前有没有已经设置了上游,这要使用git remote -v命令。

2,将原repository设置为自己fork出的repository的上游(upstream)。运用如下的命令:

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

3,运行git fetch upstream命令,如下:

remote: Enumerating objects: 122, done.
remote: Counting objects: 100% (122/122), done.
remote: Compressing objects: 100% (90/90), done.
remote: Total 97 (delta 40), reused 0 (delta 0)
Unpacking objects: 100% (97/97), done.
From https://gitea.com/zsxq/jobs_crawler
 * [new branch]      master     -> upstream/master

4,git checkout master,这是保证切换到本地的repository的master上,如果本来就在,那么这一步不是必须的。

5,运行git merge upstream/master命令,将upstream/master上的更新合并到本地的master上,其实就是将第三步中download到.git文件夹下的那些change合并到本地的master中。如下:

Updating e9540a6..c31fadf
Fast-forward
 README.md                      |   8 +-
 cmd/crawler/background.go      |  42 ++++++++
 cmd/crawler/main.go            |  32 +++---
 config/config.yaml             |  18 +++-
 dao/auto_crawl_rule.go         |  79 +++++++++++++++
 dao/auto_crawl_rule_test.go    |  38 +++++++
 dao/crawl_rule.go              |  44 ++++++++
 dao/db.go                      |  19 ++--
 dao/job.go                     | 101 ++++++++++++++++++-
 docs/db.sql                    |  19 ++--
 global/app.go                  |  77 ++++++++++++++
 global/init.go                 |  35 +++++++
 go.mod                         |   5 +-
 go.sum                         |   3 +
 http/controller/job_handler.go |  79 ++++++++++++++-
 http/middleware/logger.go      |  35 +++++++
 logic/crawler/colly.go         |  46 +++++++++
 logic/crawler/goquery.go       | 221 +++++++++++++++++++++++++++++++++++++++++
 logic/crawler/parser.go        |  68 +++++++++++++
 logic/crawler/work.go          |  55 ++++++++++
 logic/job.go                   |  14 ++-
 model/auto_crawl_rule.go       |  31 ++++++
 model/crawl_rule.go            |  26 +++++
 model/job_info.go              |   2 +-
 template/detail.html           |  49 +++++++++
 template/index.html            |  70 +++++++++++++
 util/file.go                   |  18 ++++
 util/http.go                   |  21 ++++
 util/int.go                    |   8 ++
 util/ip.go                     |  37 +++++++
 30 files changed, 1253 insertions(+), 47 deletions(-)

这时我在用gitk命令查看
git-fork

6,如果本地没有什么自己独立的更新的话,那么将执行"Fast-forward"的合并。如果本地有自己独立的更新,而又会引起冲突的话,则要解决冲突,再commit.

关于解决冲突,如果明确所有冲突都是使用upstream/master上的来override自己的,那么可以直接运行如下命令,则无需解决冲突了:

git merge -X theirs upstream/master

注意,以上步骤结束后,仅仅是本地的fork出的repository和原repository取得了同步,如果想让远程的fork出的repository也同样取得同步,必须再git push上去。

参考文章

评论