压缩来自其他分支的提交是否安全

Is it safe to squash commits from other branch

有两个分支 masterfeature

开发在 feature 分支中进行,在该分支中完成了多次提交,但在它们之间有几次与 master 分支的合并,因此功能分支的日志是例如一些东西喜欢:

将所有这些提交压缩成一个 feature commit 1 安全吗?

feature 分支合并到 master 时,我会遇到什么问题吗?

master 分支上任何文件的任何更改都会导致合并冲突(或者更糟的是,不需要的静默覆盖),因此任何其他人将他们的工作提交给 master 会给你带来问题协作更困难。


另一方面,如果您的 feature 分支历史看起来像那样,因为您在功能开发期间需要从 master 进行更改,为什么不只是 rebase 您的 feature当您需要更新时在 master 之上分支?

基本上,它的作用是使您 feature 看起来像是在合并之前从 master 分支出来的。

因此在功能开发期间,如果您使用 merge 来获得 master 更新:

  • 功能提交 1
  • 主提交 1
  • 功能提交 2
  • 主提交 2
  • 功能提交 3

但是如果你使用 rebase 来获取 master 更新:

  • 主提交 1
  • 主提交 2
  • 功能提交 1
  • 功能提交 2
  • 功能提交 3

因此,当您想将 feature 合并回 master 时,合并基本上是一个快进合并,将您的功能提交置于 master 分支之上。

当然,有些情况下合并更合适,比如您想保留历史记录,但这取决于您和您的工作流程。

更多资源可以更好地解释 merge/rebase 差异:

https://www.atlassian.com/git/tutorials/merging-vs-rebasing

https://git-scm.com/docs/git-rebase

完成功能分支后,您需要将其合并到主分支。执行此操作时,如果功能分支和主分支都在同一位置包含更改,则可能会遇到合并冲突。由于合并发生在您的本地存储库中,因此很安全,您可以花时间确保所做的所有更改都是正确的。但是,当您推送更改并且它们可供团队使用时,您所犯的任何错误都可能升级。

出于这个目的,在许多情况下建议将 master 合并到 feature 分支,修复您的 feature 分支中可能存在的合并冲突,然后将其合并回 master。我知道这涉及一个额外的官僚步骤,但这是值得的,因为您可以选择在没有任何风险的情况下推动您的合并,并且如果有人可以回答您的未决问题或有测试人员来尝试,您是在更安全的情况下。

推到 master 并不总是超级冒险​​。风险级别取决于推送到 master 和让推送的代码上线之间的步骤距离。如果推送到 master 的任何东西立即上线,那么它是非常危险的,而如果 master 是一个阶段,那么风险会降低,但我仍然认为在你的功能分支中解决任何可能的合并问题更礼貌,并且什么时候一切正常,然后合并回master

如果master自上次合并到feature后没有变化,那么你可以将你的feature分支合并到master。

理论上,单独合并每个提交更安全,但前提是这些提交经过良好测试,但实际上没有人会这样做,没有非常具体的原因,比如其他人所做的一些更改可能与你的改变。但这只有在由于某些原因头部合并失败并且您需要确定不兼容来自何处时才需要。

Is it safe to squash all these commits into one feature commit 1 ?

不,这样做不安全

Are there any problems that I could come across when merging feature branch into master ?

据我了解这个问题,在这种情况下,您正在更改 master 分支历史记录并基本上为每个人打破它。

当您压缩 feature 分支以获取从第一个到最后一个提交的提交时,除了您的两个功能提交之外,您还将压缩所有主提交 - 甚至 master提交更改了您未触及的文件。

所以你压缩的提交会有很多你根本没有改变的改变文件。当合并回 master 分支时,即使那些文件的内容没有改变,提交哈希已经改变,所以在这个 repo 中与你一起工作的人以后会有各种冲突。