将 master 重新定位到功能分支?

Rebasing master onto feature branch?

我最近加入了一个新团队,在团队 wiki 上,它要求我们执行以下 git 工作流程

git checkout -b feature_branch
#do stuff and push if needed
git checkout master
git rebase feature_branch
git rebase -i HEAD~NUMBER_OF_COMMITS_AHEAD

这与我在基本上所有来源上看到的 rebase 工作流程不同,而且它似乎也违背了我从这个博客 post https://www.atlassian.com/git/tutorials/merging-vs-rebasing 看到的 rebase 黄金法则。有人可以解释一下我的团队 wiki 建议的工作流程的原因吗?

假设指令是准确的,它们似乎正在执行 featuremaster 的拼接。假设我们从这个开始:

* (HEAD -> master) E
* D
| * (feature) K
| * J
|/  
* C
* B
* A

现在,如果我们检查 masterrebase feature,我们会得到:

* (HEAD -> master) E
* D
* (feature) K
* J
* C
* B
* A

因此,feature 的整体已在 mastermaster 分离出来的位置合并到 master 中。 master 上的后续提交已移至未来,以便它们在 feature 结束后出现。 J和K拼接成历史A,B,C[拼接],D,E.

很难想象这样做的目的是什么,更难以想象最后的交互式变基应该完成什么。

然而,相反的举动,即结帐 featurerebase master,会给我们这个:

* (feature) K
* J
* (HEAD -> master) E
* D
* C
* B
* A

这是明智之举。它使 featuremaster 的当前状态保持同步,从而最大限度地减少以后发生冲突的可能性。然后交互式 rebase 也会有意义,因为这是你清理的机会 feature。然后您将推送 feature 并发出拉取请求。这就是通常遵循的流程。

所以我的猜测是说明只是一个错误。如果不小心,这是一个很容易犯的错误,因为操作 checkout X; merge Y 的意义与操作 checkout X; rebase Y 的意义相反。前者的意思是“将 Y 合并到 X”,而后者的意思是“将 X 变基到 Y”。我敢打赌,写说明书的人对此感到困惑。