远程开发和master的最佳git实践



远程地,我有两个分支:dev和master。

我实现了3个特性(特性A、B、C),每个特性都有本地分支。然后我将这3个特性逐一合并到dev分支中。有一天,我想发布我的更改,所以我使用南瓜合并将dev合并到master。现在远程主机具有功能A、B和C。

然后,我实现了一个功能D,并从本地功能D分支合并到dev。我通过发送拉请求将dev合并到master。然而,我发现特性A、B、C的提交也显示在这个pull请求中。这很令人困惑,但我在这里找到了答案来解释它:Github"挤压合并"-显示所有先前更改的后续拉取请求其中提到的最佳做法是在合并分支后删除该分支。但是,我无法删除dev分支。我想知道在我的情况下有两个远程分支的最佳实践是什么?对我来说,通过忽略pull请求中的重复提交,将具有功能D的dev合并到master中合理吗?

您有一个功能分支,一个dev分支和一个master分支。所以你的工作流程看起来很像Git Flow——一个成功的Git分支模型——除了devdevelop不匹配,没有release分支。

Gitflow和类似的分支模型使用real合并在developmaster之间传输更改,而不是像您的情况那样使用挤压的合并。Git将压缩合并视为一个新的提交——它不跟踪您将两行工作(masterdevelop)组合在一起的信息。真正的合并正是这样跟踪的。如果使用真正的合并,那么git可以推断出ABC已经被合并,并将它们排除在D的pull请求中。

在需要保持同步的两个长寿命分支之间,挤压合并不是一个好策略。最好的选择是将master合并到dev,修复合并冲突,并将dev合并到master

git checkout dev
git merge master
# Fix merge conflicts and commit, probably nothing appears as changed
git checkout master
git merge dev --no-ff # or use git merge dev --ff if you don't want a separate merge commit

然后,您的长寿命分支应该再次同步。换一种方式做可能不太好,因为这会在master下添加很多提交。

为什么不能删除dev分支?因为你害怕失去你所做的改变?如果是这样,您可以使用git reset --soft搁置它们,删除dev并创建一个新的dev,然后取消搁置它们。如果不是这样的话,也许可以尝试使用-i标志将dev与master重新绑定

最新更新