向 GitHub 等远程仓库提交 PR 具体操作

793 阅读2分钟

第一步:将远程仓库 fork 到自己仓库

image.png

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 至远程仓库

image.png

更新1:

贡献代码步骤:

前置条件:之前提过 pr 但还没有被合并,现在想继续提其他的 pr

为什么要这么做:因为你直接提 pr,也会有你之前提 pr 的 commit 记录,非常混乱

首先在本地新建分支并切换:

  • git branch new
  • git checkout new

然后在本地把代码回滚到初始状态:

  • git reset --hard commitId

再和远程库代码进行更新同步:

  • git fetch upstream
  • git 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 记录了