请教一个有关pull request的问题

我向一个开源项目发起了pr,但是这个pr里出现了我上一次pr的commits。我按照这个博客,rebase了一下代码(也可能是我打开的方式不对),然后本来是有10条commits(2条本次pr,8条上次pr)的,现在我有20条了:joy:

这里是pr的地址

请教一下各位大佬,这种情况该如何操作,才能让pr只包含本次提交的2条commits

1 Like

看到 PR 已经 merge 了,恭喜。建议每次开发新代码都创建一个单独的分支,主分支保持和 upstream 同步。

git fetch upstream
git rebase upstream/main
git checkout -b feat-for-something

谢谢大佬的回复!之前从来没有给同一个项目做过两次以上的contribution,所以犯了这个错误!后来自己查了一下贡献指南,发现确实是因为没有在fork之后,创建独立的分支,引发的问题。
望引以为戒! :joy:

一般fork之后立刻:

git branch --set-upstream-to=upstream/main main

然后每次贡献时:

git checkout main
git pull
git checkout -b feat/something

然后push这个分支并提PR就可以了。

分支对应的remote关系为:

main           -> upstream/main
feat/something -> origin/feat/something

这样的做法,你的 origin/main 永远不用更新,于是也永远不需要做合并上游这个动作,甚至它可以不存在,因为根本没用到它。而你本地的main分支永远只包含上游的变更。这是我用的一些例子:

可以发现自从fork之后这个main就再也没更新过,一直停留在当时那个commit。但丝毫不影响我贡献的。

3 Likes

收到!当时开源经验比较少,提pr都不知道要先创建分支 :smiling_face_with_tear:

补充一下,fork之后clone自己的仓库到本地,需要先执行:

git remote add upstream 上游仓库地址
git fetch --all --prune

git branch --set-upstream-to=upstream/main main

1 Like