如何在github上正确的提交PR(记录自己的坑)
本文章主要讨论 向一个目标分支多次PR 导致 commit 叠加的问题
首先fork一个工程
这样就会在你的主页出现这个工程,like this:
然后我们要clone这个工程到本地(此处忽略配公钥过程,度娘去),fork之后的代码库我们称作 源代码库
从源分支中创建新分支
根据你要修改的版本分支确定源分支
你要针对哪个版本提PR,那个版本所在分支就是你要作为源分支的分支
本文章主要讨论的 坑 是多次针对同一个分支提PR并且之前的PR还没有被merge的情况!
创建分支
git branch -a //查看项目所有分支
git checkout origin/2.0 //切换到你所选择的源分支,视情况而定
git checkout -b yourbranch //在源分支上新建你所要提PR的分支,每一个PR要新建一个分支
修改代码commit并push
正常操作没啥好说的
git diff --name-only //查看修改了哪些
git add filename //添加要提交的修改的文件
git commit -m 'commit info' //创建commit
git push //呵呵第一次是不是美滋滋等会儿就有你爽的了(你没看错,我也没写错)
这时候返回到github,打开你fork的工程,你会发现已经他已经智能的发现了你得提交,并询问你是否要提交PR
此处无图,视力正常的应该都能看到。。。会有一个绿色的pull request的按钮,点他!就会进入了编辑PR界面
这里可以看到你得commit只有一个,非常正确
当你再次重复这一过程就会发现commit竟然叠加了!没错,叠加了
之前的commit也存在
这可真叫人头大。
解决方法
在回到源分支新建分支之前进行如下操作
git log //查看commit信息,这时候你会发现head停留在你最后一次commit上,这就是问题的原因
git reset head --hard //找到最原始的head的commitID 然后reset head --hard !!!
git checkout -b yourbranch //新建你得分支,这样head信息才正确
//修改代码,提commit
git push -f //最后一步重中之重,强制提交,不用担心之前的commit会不会消失,亲测只要pr提上去就不会消失!!
最正确的做法应该是这样
//在每次提完PR之后,checkout到源分支上reset head,再push -f
git checkout origin/2.0 //我得源分支
git log //查看最初的head
git reset commitId --hard //强制reset
git push -f //强制提交
这样就能确保每次下次新建分支head与上次的完全没影响!