git - 为什么Git默认快速合并?

  显示原文与译文双语对照的内容

来自 mercurial,我使用分支来组织功能。 当然,我想在我的历史中看到这个 work-flow 。

我用git启动了我的新项目,完成了第一个功能。 在合并这里特性时,我意识到git使用了 fast-forward,换句话说,将我的更改直接应用到主分支,并忘记了我的分支。

所以考虑到未来: 我是唯一一个在这个项目上工作的人。 如果我使用git的默认方法( fast-forward合并),我的历史会导致一个巨大的主分支。 没有人知道我为每个特性都使用了单独的分支,因为最终我只拥有那个巨大的主分支。 这看起来不专业?

通过这种推理,我不希望fast-forward合并,也不明白为什么它是默认的。 它有什么优点?

时间:

让我在 VonC上展开一点非常全面的答案:


首先,如果我记得正确的话,这一事实git默认不创建合并提交 fast-forward案例来自考虑 single-branch"等仓库",在相互把这两个存储库用于同步 ( 你可以在大多数用户的文档中找到一个工作流,包括"git用户手册"以及"") 版本控制的例子。 在这种情况下,你不使用pull来合并完全实现的分支,你使用它来跟上其他工作。 当你碰巧保存并保存在存储库中并保存在存储库中时,你不会希望有短暂而又无关紧要的事实。

请注意,特性分支和在单个存储库中拥有多个分支的有用性,只有在使用了良好的合并支持和良好的合并支持后,才能使用各种merge-based工作流。 这就是为什么Mercurial最初只支持每个储存库( 用于跟踪远程分支的匿名提示)的一个分支,如旧版本的"Mercurial: 确定的指南"。


fast-forward情况 。., 的几秒钟,当遵循最佳实践的使用功能分支 ( 通常来自上次发布),即为特性的分支都应该从头稳定版本,能够cherry-pick并选择要包含哪些功能通过选择哪个特性分支与合并,通常是你 not. 这使这个问题变得不对。 你需要担心创建一个真正的合并而不是fast-forward第一分支合并( 假设你不直接将single-commit更改置于'大师') ;所有其他后来合并当然是在非fast-forward情况。

HTH

...