封面来源:絵描き娘の作業部屋2021 | 佐倉おりこ #pixiv https://www.pixiv.net/artworks/89286307
假如 Fork 来的仓库中文件的内容发生了变更,此时想要同步复刻上游仓库就无法通过 Fetch upstream(提取上游)下拉菜单一键实现了。具体情况表现为下拉菜单中只存在 Open pull request 选项而没有 Fetch and merge(提取并合并)。要解决这个问题,需要用到 **Git**,它是一个免费开源的分布式版本控制器。
找到对应系统版本的安装包来安装 Git,安装完成后能找到三个相关工具,分别是 Git CMD、Git GUI 和 Git Bash,这里只需要用到 Git Bash。
配置 Git Bash
首次使用 Git Bash 需要先设置一个用户,这样远程仓库就能知道是谁对仓库做了修改。
1 | git config --global user.name "Username" |
如果使用了 --global
选项,那么该命令只需要运行一次,之后无论在 Git 做任何操作, Git 都会使用该信息。若想针对特定项目使用不同的用户名与电子邮件时,可以只在那个项目目录下运行没有 –global 选项的命令来配置。
配置本地仓库
接着使用 git clone 从现有 Git 仓库中拷贝需要同步复刻的项目。
1 | git clone <repo> <directory> |
这里的 <repo>
就是远程仓库地址,可以在 Github 仓库页面的 Code - Clone 选项中找到,一般使用 HTTPS 链接即可;而 <directory>
则是选择该仓库在本地存放的路径。
解决 Merge 冲突
仓库成功克隆到本地之后,就可以开始同步复刻上游仓库的命令了,在 Git Bash 中依次输入如下命令:
1 | # 拉取上游仓库的更改 |
这时命令行便会输出存在冲突的文件,通常表现为:
1 | CONFLICT (content): Merge conflict in path/to/file.txt |
接下来需要做的,就是在本地用文本编辑器打开存在冲突的文件,仔细检查该文件的内容,Git 已经用符号标记出了冲突的位置,从 <<<<<<< HEAD
到 =======
是未修改之前文件内容,而从 =======
到 >>>>>>> upstream/main
则是上游仓库修改之后的内容。
选择想要保存的内容,然后删除其余被标记的内容,标记符号也要一并删除,最后别忘记保存。
Push 至远程仓库
回到 Git Bash,依次输入如下命令来提交更改后的文件,并将本地仓库全部推送到远程仓库。其中 xxx
是对于此次提交修改的说明,依据情况填写即可。
1 | git add path/to/file.txt |
最后在 Github 仓库页面便可以检查到这次通过 Git Bash 的修改,同时 Fetch upstream 菜单中应该会提示 No new commits to fetch. Enjoy your day! 代表同步复刻已经全部完成。