1 新建仓库git-demo,分支为main
2 在GitHub新建分支feature
3 本地fetch GitHub仓库,将feature分支同步到本地,获取后的状态是:main和feature分支的commit是同一个。
4 添加三个文件,分别提交三个commit到本地的feature分支。
请注意:提交后 本地 的feature分支向前步进三次,但 origin(即GitHub上的feature分支)仍旧是停留在"initial commit"的那一次提交上
5 推送本地feature分支到GitHub。
6 在确认code review通过后,使用提交GitHub pull request请求合并(Merge)入main分支。
7 合并相关pull request请求。
请注意:这里的合并使用的是Direct merge(直接合并),而不是Squash Merge(聚合合并,即将feature分支上的所有提交压缩成一次提交后合并),也不是Rebase 合并(变基合并)。
8 确认 git 仓库的commit树。(注,图中的本地git客户端是已经git fetch并git pull过的,并checkout到了最新的commit上)
9 (很重要)在线的feature分支上是没有任何pull request的内容的。
但实际在重新针对feature分支执行git fetch并git pull之后,本地的feature分支是比在线的feature分支往前一步进的(即最新commit落在了merge pr的地方)
重新克隆仓库后该问题消失。怀疑是git fetch并git pull两个都执行不行,应该只针对feature分支执行git pull就足够。
事实上,当Merge完成后,feature分支确实是比main分支落后一次提交的(既然feature分支是基于main分支创建的,而刚刚的Merge实际上就是给main分支新增了一个提交,自然GitHub会提醒)
我的建议是,虽然两个分支不存在文件差异,但应该将main分支的东西同步到feature分支上,以便于后续继续在feature分支上开发。
https://docs.github.com/zh/enterprise-server@3.7/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/about-pull-request-merges#rebase-and-merge-your-commits
简而言之,GitHub的Rebase跟
git rebase不太一样,确实是”直接把commit复制过去“。