如何经常从主分支重新建立功能分支,而不强制推送到功能分支

Var*_*nde 5 git version-control github gitlab

我们有一个master分支机构,还有feature很多分支机构,我们在那里开展工作。
我的组织遵循变基工作流程。

我们分出分支master

(master)git checkout -b feature
Run Code Online (Sandbox Code Playgroud)

经过几次提交后,当当天需要注销时,我们只需推送:

(feature)git push
Run Code Online (Sandbox Code Playgroud)

一旦功能准备就绪,我们就将feature分支变基master

(feature)git checkout master
(master)git pull
(master)git checkout feature
(feature)git rebase master
Run Code Online (Sandbox Code Playgroud)

如果是星期一,请解决所有合并冲突。
然后我们将本地分支推送到origin,以便管理员可以使用gitlab接口将其与master合并。
在这里,我们被迫强制推feature送到远程:

(feature)git push -f
Run Code Online (Sandbox Code Playgroud)

这几乎是我整个团队所做的事情,每个人通常在不同的分支工作,所以这不是问题。但我还是想避免强迫。

更安全的替代方案:

(feature)git push --force-with-lease
Run Code Online (Sandbox Code Playgroud)

使用force-with-lease如果推送要覆盖其他人的提交,则

但有人知道我们可以完全避免任何类型的武力的另一种方法吗?

可能是 rebase 显示为额外提交?

Ton*_*rra 5

根据定义,变基意味着您正在重写分支的历史 - 这需要强制推送。

如果您想使用 master/main 的更改来更新功能分支,而不需要事后强制推送,则需要使用合并(这不是基)。

您的两个选择是传统的合并提交或压缩合并。传统的合并提交就像这样完成:

git checkout feature
git merge master --no-ff
Run Code Online (Sandbox Code Playgroud)

feature这将随着 的更改而更新master,并且将成为master的父级之一feature

提交图如下所示:

git merge master --no-ff

您描述的方式,“变基显示为额外提交的东西?”,可以使用“挤压合并”来完成:

git checkout feature
git merge --squash master
git commit
Run Code Online (Sandbox Code Playgroud)

这将通过将来自 master 的所有更改压缩到单个提交到 上来更新feature来自的更改。它不会改变 的父母。masterfeaturefeature

这个提交图看起来像这样:

git 合并 --squash