最佳 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 - 除了 dev
与 develop
不匹配并且没有 release
分支。
Gitflow 和类似的分支模型在 develop
和 master
之间传输变化与 real 合并——而不是 squash 像您的情况一样合并。 Git 将 squash 合并视为新提交——它不会跟踪您合并两行工作(master
和 develop
)的信息。真正的合并正是执行此跟踪。如果您使用真正的合并,那么 git 可以推断出 A
、B
和 C
已经合并并将它们留在 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 下添加很多提交。
在远程,我有两个分支: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
分支。所以看起来你的工作流程很像 Git-Flow -- A successful Git branching model - 除了 dev
与 develop
不匹配并且没有 release
分支。
Gitflow 和类似的分支模型在 develop
和 master
之间传输变化与 real 合并——而不是 squash 像您的情况一样合并。 Git 将 squash 合并视为新提交——它不会跟踪您合并两行工作(master
和 develop
)的信息。真正的合并正是执行此跟踪。如果您使用真正的合并,那么 git 可以推断出 A
、B
和 C
已经合并并将它们留在 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 下添加很多提交。