第一步:将远程仓库 fork 到自己仓库
fork 到自己仓库就是建了一个副本,修改代码不会影响远程仓库
远程仓库地址:git@github.com:upstream/xxx.git
自己仓库(fork 的副本)地址:git@github.com:myself/xxx.git
第二步:将自己仓库 clone 到本地
git clone git@github.com:myself/xxx.git
第三步:在本地同步远程仓库的代码
建立一个远程仓库连接:
git remote add upstream git@github.com:upstream/xxx.git
合并分支:
git fetch upstream
git merge upstream/远程分支
注:pull = fetch + merge
git pull upstream 远程分支:本地分支
第四步:本地建立新分支并贡献代码
git branch 新分支
git checkout 新分支
贡献代码........
第五步:提交代码至自己仓库
git add .
git commit -m "注释"
git push origin 本地分支:远程分支
注1:origin 是 clone 时生成的连接(和 clone 的仓库相连),upstream 是我们自己添加的连接
注2:不能直接向远程库 push,要先 push 到自己 fork 的副本库,再在副本库中向远程库提交 PR
第六步:提交 PR 至远程仓库
更新1:
贡献代码步骤:
前置条件:之前提过 pr 但还没有被合并,现在想继续提其他的 pr
为什么要这么做:因为你直接提 pr,也会有你之前提 pr 的 commit 记录,非常混乱
首先在本地新建分支并切换:
git branch newgit checkout new
然后在本地把代码回滚到初始状态:
git reset --hard commitId
再和远程库代码进行更新同步:
git fetch upstreamgit merge upstream/develop
然后开始修改代码.........
这里不用在 fork 的远程库手动建立分支(git push :远程分支 可以删除远程分支)
修改之后直接开始提交三步走:
git add .git commit -m ""git push origin new(这个 new 就会在 fork 的远程库自动新建分支)
然后去 fork 的远程库提 pr,就不会出现之前提交 pr 的 commit 记录了
更新2:
更新1 中问题的另一种解决方案:
首先本地新建分支
其次直接远程库分支覆盖掉本地分支
git fetch --all
git reset --hard upstream/dev
git pull upstream dev
然后就修改代码提 pr,就不会存在之前提 pr 的记录了
更新3:
再一种方案:
建议拿出一个分支专门用来和远程库同步
每次需要提新 pr,建立本地分支就从这个专门同步的分支建立
更新4:
如果需要测试某个 pr 的某个 commit 的代码,步骤如下:
查看 pr,找到 b 库 1 分支向 a 库 1 分支 提的 pr。
那么在本地 clone a 库,并新建分支(本地有库就不用 clone)
git fetch b 1
git merge b/1
这样就可以查看 b 库 1 分支的 commit 记录了