给别的 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 上的变基和合并行为与
help.github.comgit rebase
略有偏差。 GitHub 上的变基和合并始终会更新提交者信息并创建新的提交 SHA,而 GitHub 外部的git rebase
在提交原型上发生变基时不改变提交者信息。
参考资料
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
发表回复