问题描述
有一个仓库A,我经过fork
后变成了仓库B,当仓库A已经有了新提交时,我需要更新仓库B,该怎么办呢?
解决
1,首先,检查一下当前的配置,看看当前有没有已经设置了上游,这要使用git remote -v
命令。
2,将原repository设置为自己fork出的repository的上游(upstream)。运用如下的命令:
1
| $git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
|
3,运行git fetch upstream
命令,如下:
1 2 3 4 5 6 7 8
| 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中。如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| 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
命令查看
6,如果本地没有什么自己独立的更新的话,那么将执行”Fast-forward”的合并。如果本地有自己独立的更新,而又会引起冲突的话,则要解决冲突,再commit.
关于解决冲突,如果明确所有冲突都是使用upstream/master上的来override自己的,那么可以直接运行如下命令,则无需解决冲突了:
1
| git merge -X theirs upstream/master
|
注意,以上步骤结束后,仅仅是本地的fork出的repository和原repository取得了同步,如果想让远程的fork出的repository也同样取得同步,必须再git push上去。
参考文章