不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

Git如何更新fork后的repository

问题描述

有一个仓库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命令查看
git-fork

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

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

1
git merge -X theirs upstream/master

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

参考文章

------ 本文结束------
如果本篇文章对你有帮助,可以给作者加个鸡腿~(*^__^*),感谢鼓励与支持!