最佳 git 远程与开发人员和大师一起练习

best git practice with dev and master in remote

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

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

然后,我实现了一个Feature D,并从本地Feature D分支合并到dev。我通过发送拉取请求将 dev 合并到 master。但是,我发现这个 pull request 中也显示了 Feature A、B、C 的提交。这很令人困惑,但我在这里找到了解释它的答案:Github "Squash and Merge" - subsequent pull request showing all previous changes 其中提到最佳做法是在合并后删除分支。但是,我无法删除 dev 分支。我想知道在我的案例中有两个远程分支的最佳做法是什么?我通过忽略拉取请求中的重复提交将 dev 与功能 D 合并到 master 是否合理?

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

将 dev 与 master 变基

您有功能分支,一个 dev 分支和一个 master 分支。所以看起来你的工作流程很像 Git-Flow -- A successful Git branching model - 除了 devdevelop 不匹配并且没有 release 分支。

Gitflow 和类似的分支模型在 developmaster 之间传输变化与 real 合并——而不是 squash 像您的情况一样合并。 Git 将 squash 合并视为新提交——它不会跟踪您合并两行工作(masterdevelop)的信息。真正的合并正是执行此跟踪。如果您使用真正的合并,那么 git 可以推断出 ABC 已经合并并将它们留在 D 的拉取请求中.

在需要保持同步的两个长期存在的分支之间,挤压合并不是一个好的策略。最好的选择是将 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 下添加很多提交。