Github上给开源项目提交Pull Request

给别的 Repo 提 Pull Request 的一般流程是:

  • Fork
  • 开一个分支,在分支里修改代码
  • create Pull Request
  • 如果上游 default 分支有更新,merge 上游 default 分支

如果一开始就在 default 分支里直接改了代码,会导致后续跟进上游时很不方便。因此最好是在分支里修改代码。如果已经这样做了,可以执行以下步骤:

  • 以 default 分支为基础创建一个新分支来保存自己的更改
  • 执行 git reset --hard commitId 来删除自己的提交
  • 执行 git push --force 强制提交

之后就可以 merge 上游代码了。

另外一个问题是,合并上游代码时 Github 会自动创建一个 Merge commit,这样会导致 Fork 的项目比上游多了一个 commit,可以在命令行下解决:

  • 到 default 分支,一般是 master,git checkout master
  • 直接拉取上游分支代码:git pull https://github.com/repo/name BRANCH_NAME
  • 提交代码

Github merge 时有一个 Rebase and merge,此功能会修改 commit sha,并不适合给开源项目提交 pull request。

GitHub 上的变基和合并行为与 git rebase 略有偏差。 GitHub 上的变基和合并始终会更新提交者信息并创建新的提交 SHA,而 GitHub 外部的 git rebase 在提交原型上发生变基时不改变提交者信息。

help.github.com

参考资料

1. https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/merging-an-upstream-repository-into-your-fork
2. https://segmentfault.com/q/1010000000115900
3. https://stackoverflow.com/questions/20222730/git-how-to-merge-upstream-changes-without-causing-a-merge-commit
4. https://help.github.com/cn/github/collaborating-with-issues-and-pull-requests/about-pull-request-merges

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注