之前一直以为自己Git学的超级棒,心里也没觉得这个Git以后会让自己多为难,直到解决了issue并提交的过程后,明明只commit了一条,到PR的时候有n多条commit,这时候我才发现有很多相关的操作都被我弄错了,做的很不到位,让PR作者还要去改我的PR,就很难堪,所以自己重新去重学了一遍,现在感觉“非常通透”。在此也把比较常用的一些具体情境的操作方法告诉一些需要的伙伴们,好啦,我们开始!
如题,只讲实际场景,不介绍相关基础概念了
如何将开源项目复制到本地并贡献代码?
Fork项目到自己的仓库
克隆存储库到本地
git clone https://a.com/tabzzz/b.git
获取项目的源代码
-
先添加原仓库的地址到本地:
git remote add upstream https://a.com/xxx/b.git
-
直接获取原仓库的最新源码:
git pull upstream main
创建新分支
创建新分支是为了避免我们云端的主分支(main)遭到污染,我们通常是在其他分支上开发,最后合并到本地主分支,再进行提交的
git branch -b kaifa
随便起什么名字都行,我这乱搞的...
开发提交
*注意:我们现在是在kaifa
分支上,并不是main
分支
git add .
git commit -m "new commit"
合并修改
-
为了确保我们的提交是建立在最新的仓库中,我们最好还是先同步
我们所克隆项目的代码
到我们自己云端的主分支(main)
上:git checkout main git pull upstream main
-
然后我们切换回我们的
kaifa
分支:git checkout kaifa
-
把原仓库最新的代码合并到
kaifa
分支中:git rebase main
-
把我们最新更新(开发)的代码提交到我们的
kaifa
分支中:git push origin kaifa
提交修改(发送PR)
这里你可以直接点开你所fork的仓库,Github
会很智能的发现你的分支有更新,并询问你是否需要Contribute
,后面就不多说啦
开源项目的原仓库更新后,如何同步到本地及云端呢?
具体的流程概要图如下:
下面是具体的操作:
查看远程仓库的配置
git remote -v
如果我们没有做过其他的配置,我们的远程仓库配置看起来应该是像这样的:
origin https://a.com/tabzzz/b.git (fetch)
origin https://a.com/tabzzz/b.git (push)
添加当前所fork仓库的原地址
如果在第一次clone
的时候就设置这一步了的话,直接跳过这一步)
git remote add upstream https://a.com/xxx/b.git
然后我们可以检查是否添加成功:
$ git remote -v
origin https://a.com/tabzzz/b.git (fetch)
origin https://a.com/tabzzz/b.git (push)
upstream https://a.com/xxx/b.git (fetch)
upstream https://a.com/xxx/b.git (push)
获取原仓库的更新
拉取原仓库的最新更新到本地:
此操作只会将原仓库的更新下载到本地的远程分支(如 upstream/main),不会自动合并到当前分支。
git fetch upstream
查看本地分支
$ git branch -a
a
* b
c
d
- 表示当前所在的分支
同步更新到本地仓库的对应分支
git merge upstream/b
查看原仓库更新的具体情况
git log
提交更新内容到云端地址(fork的地址)
git push origin b
我们可以通过刷新我们云端仓库的页面,观察Commit
的数量有没有增加,如果有,那么你应该就是成功啦!
如果大家还有什么实际的场景摸不透的,欢迎在评论里留言,我会重新编辑文章添加你的场景操作ovo