将 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 建议的工作流程的原因吗?
假设指令是准确的,它们似乎正在执行 feature
到 master
的拼接。假设我们从这个开始:
* (HEAD -> master) E
* D
| * (feature) K
| * J
|/
* C
* B
* A
现在,如果我们检查 master
和 rebase feature
,我们会得到:
* (HEAD -> master) E
* D
* (feature) K
* J
* C
* B
* A
因此,feature
的整体已在 master
从 master
分离出来的位置合并到 master
中。 master
上的后续提交已移至未来,以便它们在 feature
结束后出现。 J和K拼接成历史A,B,C[拼接],D,E.
很难想象这样做的目的是什么,更难以想象最后的交互式变基应该完成什么。
然而,相反的举动,即结帐 feature
和 rebase master
,会给我们这个:
* (feature) K
* J
* (HEAD -> master) E
* D
* C
* B
* A
这是明智之举。它使 feature
与 master
的当前状态保持同步,从而最大限度地减少以后发生冲突的可能性。然后交互式 rebase 也会有意义,因为这是你清理的机会 feature
。然后您将推送 feature
并发出拉取请求。这就是通常遵循的流程。
所以我的猜测是说明只是一个错误。如果不小心,这是一个很容易犯的错误,因为操作 checkout X; merge Y
的意义与操作 checkout X; rebase Y
的意义相反。前者的意思是“将 Y 合并到 X”,而后者的意思是“将 X 变基到 Y”。我敢打赌,写说明书的人对此感到困惑。
我最近加入了一个新团队,在团队 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 建议的工作流程的原因吗?
假设指令是准确的,它们似乎正在执行 feature
到 master
的拼接。假设我们从这个开始:
* (HEAD -> master) E
* D
| * (feature) K
| * J
|/
* C
* B
* A
现在,如果我们检查 master
和 rebase feature
,我们会得到:
* (HEAD -> master) E
* D
* (feature) K
* J
* C
* B
* A
因此,feature
的整体已在 master
从 master
分离出来的位置合并到 master
中。 master
上的后续提交已移至未来,以便它们在 feature
结束后出现。 J和K拼接成历史A,B,C[拼接],D,E.
很难想象这样做的目的是什么,更难以想象最后的交互式变基应该完成什么。
然而,相反的举动,即结帐 feature
和 rebase master
,会给我们这个:
* (feature) K
* J
* (HEAD -> master) E
* D
* C
* B
* A
这是明智之举。它使 feature
与 master
的当前状态保持同步,从而最大限度地减少以后发生冲突的可能性。然后交互式 rebase 也会有意义,因为这是你清理的机会 feature
。然后您将推送 feature
并发出拉取请求。这就是通常遵循的流程。
所以我的猜测是说明只是一个错误。如果不小心,这是一个很容易犯的错误,因为操作 checkout X; merge Y
的意义与操作 checkout X; rebase Y
的意义相反。前者的意思是“将 Y 合并到 X”,而后者的意思是“将 X 变基到 Y”。我敢打赌,写说明书的人对此感到困惑。