一、做点贡献
想对别人的某个仓库“做点贡献”怎么办?
1. Fork该仓库
首先Fork该仓库,本文以git-learn这个仓库为例
这样自己的账号下就会出现这样一个仓库
2. Clone代码并修改
然后把这个仓库clone下来
git clone https://github.com/FlyLolo/git-learn.git
我新建了一个Student类
3. 提交修改到自己的仓库
然后将修改提交
git add .
git commit -m 'add student'
git push origin master
这样会将修改提交到自己账号下的git-learn仓库
那么如何将修改提交到源仓库呢?
4. 提交pull requests
如果想将修改提交到源仓库,需要进行pull requests
点击上图的pull requests按钮,可以看到自动做了配置
图中红框部分显示了提交修改的方向,即从自己账号仓库的main分支提交到源仓库的main分支。
点击create pull request按钮:
点击下面的按钮提交就可。
5. 源仓库审核pull requests
此时源仓库的作者在源仓库的pull requests页面就会看到如下的Merge pull请求
可以对该请求做相应的处理
比如点击Merge pull request同意将修改合并。
二、Fork过来的仓库如何更新
当一个仓库被Fork过来之后,它是不会随着源仓库更新的,那么如果想同步源仓库的更新过来如何操作呢?
还是pull requests。
默认是向原仓库提交修改请求
我们现在不一样,想用原仓库更新fork过来的仓库
首先修改左侧的,改成自己的仓库
此时会变成这样
点击图中的蓝字“ compare across forks”,可以看到箭头两边都是自己的仓库
更改右侧的仓库,最终结果如下图
已经找到了更新,点击右上角的create pull request 按钮
更新即可,这样就完成了main分支的更新。
三、 适用于阅读源码
看一下如何通过Fork方式满足的我源码阅读需求。
首先我想阅读的是指定版本的源码,例如tomcat的10.0.21版本,这需要我去clone它的tag 10.0.21,这样才能保证版本一致。
1. 如何Clone指定的标签
这里我指定了标签 v1.0
git clone -b v1.0 https://github.com/FlyLolo/git-learn.git
切换到对应的文件夹
cd git-learn
2. 我要添加注释
我想对部分代码进行注释,并提交到自己的仓库。(源仓库估计不会接收这样的修改请求,自己看就行了)
修改一个文件,例如添加了一个注释
准备提交修改
提示detached HEAD
如果是在IDEA中也会提示失败
其实clone的时候已经有提示,见第一幅图的红框提示。需创建并切换到一个新的分支。我将其命名为tag-v1.0
git switch -c tag-v1.0
push的时候如果未指定分支会有如下提示:
按提示操作:
提交成功。网页查看一下,已经有了新建的分支:
3. 代码如何更新版本
如果此时源仓库更新了v2.0甚至v3.0版本,而我这里还是v1.0的代码怎么办?
3.1 一次失败的尝试
首先,我想到了第二节的反向pull request, 机智如我
做了如上图配置,右侧选择了源仓库的tag v3.0 ,如愿的识别出了差异,但此时才发现原来的create pullrequest按钮没有了,尝试失败。
3.2 通过upstream获取更新合并
查看现有的remote地址
git remote -v
添加源仓库地址到upstream
git remote add upstream https://github.com/Test-2022/git-learn.git
再次查看remote地址列表
git remote -v
获取upstream的数据
git fetch upstream
可以看到获取到了源仓库的各个分支和tag。
也可以获取指定的tag
git fetch upstream tag v3.0
合并分支
git merge v3.0
如果像这样出现合并冲突,自行解决冲突即可。