GitHub 用命令行合并 Fork 的仓库

有时候,我们会在 GitHub 上从别人的仓库 Fork 一个项目到自己的仓库里,修改部分代码,以供自己使用。除了修改的部分,如果别人仓库的代码有更新,我们也希望能及时同步。GitHub 本身提供了自动同步的机制,但如果代码有冲突,此时只能通过命令行手动合并了。

假设别人的仓库地址是 git@github.com:[user]/[repo].git,你需要把这里的 [user][repo] 分别替换成对方仓库的用户名和仓库名。在本地,cd 到仓库目录中后,先检出一个分支并测试更改:

1
2
$ git checkout -b [repo]-main main
$ git pull git@github.com:[user]/[repo].git main

记得替换 [user][repo]。如果代码有冲突,就手动修改冲突的代码,以解决冲突。通过文本编辑器(如 vim 等)打开冲突的文件时,通常会看到类似下面的标记:

1
2
3
4
5
<<<<<<< HEAD
你的修改
=======
其他人的修改
>>>>>>> branch_name

<<<<<<< HEAD=======之间是你的修改,=======>>>>>>> branch_name之间是其他人的修改。根据需要,手动编辑文件,选择保留哪些修改或者进行修改合并。

此外,如果有些冲突的文件(比如图片),你没法用文本编辑器打开,但想直接使用本地的版本来解决冲突,那么可以使用下面的命令来保留本地版本:

1
$ git checkout --ours <file_path>

<file_path> 替换成你要解决冲突的文件路径。例如:

1
$ git checkout --ours public/favicon.ico

解决完所有的冲突后,你需要添加所有已解决冲突的文件,并提交更改:

1
2
$ git add .
$ git commit -m "Resolved merge conflicts with local version"

最后,合并修改的部分到主分支,并提交到 GitHub

1
2
3
$ git checkout main
$ git merge --no-ff [repo]-main
$ git push origin main

这样就完成了代码的手动合并操作。


GitHub 用命令行合并 Fork 的仓库
https://aizpy.com/2024/01/15/github-fork-command-line-merge/
作者
aizpy
发布于
2024年1月15日
许可协议