执行“Squash and Merge”后可能出现的问题?

Possible issue after doing `Squash and Merge`?

我使用 Squash and Mergedev 分支合并到 main 中,因为我不希望来自 dev 分支的一些提交消息出现在 [=12] 中=]
但是现在我发现 main 比 dev.
提前 1 次提交 并且图表显示 devmain 之间没有联系。这是我以前没见过的,第一次使用Squash和merge

存储库图表:

现在,我应该怎么做:

  1. git checkout dev
  2. git rebase main

否则,我做了Squash and Merge之后应该怎么办,以防止出现意想不到的问题。

在这里,我无法理解情况。我可能想错了。那样的话,请告诉我什么是正确的。

我的工作流程:

我有两个长期存在的分支 maindev。然后我有短暂的分支 featurebughotfix 等。main 分支始终保持生产就绪状态。当我将 dev 合并到 main

时,我将删除最后一个 feature 分支

我的 dev 分支是这样的:

main 分支如下所示:

注:

不幸的是,你有两个相互矛盾的愿望:

I have two long-lived branches main & dev.

你没有说明,但通常你希望这些长期存在的分支定期同步,而这正是你试图做的。但这意味着你不能这样做:

... because I didn't want some of the commit messages from dev branch to appear in main.

通过压缩,你得到的 code 在两个分支中都是相同的,但你真的需要同步提交,否则你会有很多未来的痛苦合并。除非您愿意从 main 定期重写 dev,否则您将需要修改流程以确保所有提交到 dev 的内容都是“正确的”,因为它们最终会结束也在 main 中。

从现在开始,我会建议通过常规合并将 dev 合并到 main(fast-forward 或 --no-ff,这取决于您)。以后,遵循这个经验法则:

It's OK to use squash-merge when merging feature branches into dev and/or main, but you should never use squash-merge when merging long lived branches together. This will prevent you from having the problem again in the future.

为了解决您目前的情况,根据评论中的讨论,我们知道您现在可以重写 devmain,并且您对 [=] 上的提交感到满意11=]。因此,我建议执行以下操作来清理它:

# rewrite the squash-merge commit message on main to be more meaningful
git switch main
git commit --amend -m "Import web app and modify profile"
git push --force-with-lease

# reset dev to look like main
git switch dev
git reset --hard main
git push --force-with-lease