我有两个分支:dev和master。
我实现了3个功能(功能A,B,C),并且每个功能都有本地分支。然后,我将这三个功能逐一合并到dev分支中。有一天,我想发布我的更改,所以我将开发者合并为使用壁球合并的大师。现在,远程主服务器具有功能A,B和C。
然后,我实现了功能D,并从本地功能D分支合并到开发人员。我通过发送拉取请求将开发人员合并到母版中。但是,我发现功能A,B,C的提交也显示在此拉取请求中。这非常令人困惑,但是我在这里找到了解释的答案:Github "Squash and Merge" - subsequent pull request showing all previous changes 其中提到的最佳做法是在合并分支后将其删除。但是,我无法删除dev分支。我想知道在我的情况下有两个远程分支的最佳实践是什么?对我来说,通过忽略请求请求中的重复提交将具有功能D的开发人员合并到母版中是否合理?
答案 0 :(得分:2)
您有功能分支,一个dev
分支和一个master
分支。因此,看来您的工作流程就像Git-Flow -- A successful Git branching model一样-除了dev
与develop
不匹配且没有release
分支之外。
Gitflow和类似的分支模型通过 real 合并在develop
和master
之间传输更改-与您的情况不同,不是使用 squash 合并。 Git将壁球合并视为新的提交-它不会跟踪将两行工作结合在一起的信息(master
和develop
)。真正的合并正是执行此跟踪。如果使用真正的合并,则git可以推断出A
,B
和C
已经合并,并将它们留在对D
的请求中。
答案 1 :(得分:1)
在需要长期保持同步的两个长期分支之间,压缩合并不是一个好策略。最好的选择是将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下增加很多提交。
答案 2 :(得分:0)
为什么不能删除dev分支?因为您害怕丢失所做的更改?如果是这样,您可以使用git reset --soft
搁置它们,删除dev并创建一个新的dev,然后搁置它们。
如果不是这种情况,则可能尝试使用-i标志使用master来重新开发开发平台