惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
GbyAI
GbyAI
P
Proofpoint News Feed
B
Blog
MyScale Blog
MyScale Blog
V
V2EX
B
Blog RSS Feed
Microsoft Security Blog
Microsoft Security Blog
量子位
Jina AI
Jina AI
博客园 - 叶小钗
Recent Announcements
Recent Announcements
有赞技术团队
有赞技术团队
罗磊的独立博客
L
LangChain Blog
I
InfoQ
云风的 BLOG
云风的 BLOG
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
人人都是产品经理
人人都是产品经理
小众软件
小众软件
V
Visual Studio Blog
月光博客
月光博客
The Cloudflare Blog
雷峰网
雷峰网

澄沨的漫游茶记

《向山进发》巡礼·富士山吉田线 - 澄沨的漫游茶记 こんにちは、Astro - 澄沨的漫游茶记 岁暮杂记 在 KOReader 上显示直排文本 虎落平阳:TNO 美国罗伯特·F·肯尼迪线·前篇 烟火·乙巳 蜀都行纪 实习日 事故小记 烟火·甲辰 藏地行纪 元旦杂记 浴火重生:TNO 东方红西北国防阵线党权线·后篇 太阳旗之下:TNO 东方红西北国防阵线党权线·前篇 尚在人间:TNO 乌克兰-苏维埃社会主义共和国线 上海电信 SDN 网关全局域网皆可收看 IPTV 的实现 论 AList 的滥用:多平台串联搭建个人影音-番剧流媒体服务 俄罗斯已逝:TNO 俄罗斯科米-神俄线·后篇 紫日高悬:TNO 俄罗斯科米-神俄线·前篇 The Pure WINDOWS Project: 使用 Windows Sandbox 隔离腾讯系软件的笔记 廣東手艺人:TNO 广东国索尼-长江实业线 使用 PaaS 服务部署 umami 统计工具的笔记 柏林春晓:TNO 德国施佩尔左线 闲话 COMICUP 与敝站 解决小米手机在 fastboot 模式下不被 Windows 识别的问题 贺正·癸卯 MIUI 下观看 Netflix 等流媒体时 Widevine DRM L1 认证失效之解决 崇明骑行纪事·合 磊哥小传
解决 Github 同步复刻上游仓库时冲突的问题
澄沨 · 2022-03-20 · via 澄沨的漫游茶记

假如 Fork 来的仓库中文件的内容发生了变更,此时想要同步复刻上游仓库就无法通过 Fetch upstream(提取上游)下拉菜单一键实现了。具体情况表现为下拉菜单中只存在 Open pull request 选项而没有 Fetch and merge(提取并合并)。要解决这个问题,需要用到 Git,它是一个免费开源的分布式版本控制器。

找到对应系统版本的安装包来安装 Git,安装完成后能找到三个相关工具,分别是 Git CMD、Git GUI 和 Git Bash,这里只需要用到 Git Bash

配置 Git Bash

首次使用 Git Bash 需要先设置一个用户,这样远程仓库就能知道是谁对仓库做了修改。

1
2
git config --global user.name "Username"
git config --global user.email "email@example.com"

如果使用了 --global 选项,那么该命令只需要运行一次,之后无论在 Git 做任何操作, Git 都会使用该信息。若想针对特定项目使用不同的用户名与电子邮件时,可以只在那个项目目录下运行没有 –global 选项的命令来配置。

配置本地仓库

接着使用 git clone 从现有 Git 仓库中拷贝需要同步复刻的项目。

1
git clone <repo> <directory>

这里的 <repo> 就是远程仓库地址,可以在 Github 仓库页面的 Code - Clone 选项中找到,一般使用 HTTPS 链接即可;而 <directory> 则是选择该仓库在本地存放的路径。

解决 Merge 冲突

仓库成功克隆到本地之后,就可以开始同步复刻上游仓库的命令了,在 Git Bash 中依次输入如下命令:

1
2
3
4
5
6
7
8

git fetch upstream


git checkout main


git merge upstream/main

这时命令行便会输出存在冲突的文件,通常表现为:

1
2
CONFLICT (content): Merge conflict in path/to/file.txt
Automatic merge failed; fix conflicts and then commit the result.

接下来需要做的,就是在本地用文本编辑器打开存在冲突的文件,仔细检查该文件的内容,Git 已经用符号标记出了冲突的位置,从 <<<<<<< HEAD======= 是未修改之前文件内容,而从 =======>>>>>>> upstream/main 则是上游仓库修改之后的内容。

选择想要保存的内容,然后删除其余被标记的内容,标记符号也要一并删除,最后别忘记保存。

Push 至远程仓库

回到 Git Bash,依次输入如下命令来提交更改后的文件,并将本地仓库全部推送到远程仓库。其中 xxx 是对于此次提交修改的说明,依据情况填写即可。

1
2
3
git add path/to/file.txt
git commit -m "xxx"
git push

最后在 Github 仓库页面便可以检查到这次通过 Git Bash 的修改,同时 Fetch upstream 菜单中应该会提示 No new commits to fetch. Enjoy your day! 代表同步复刻已经全部完成。