【问题标题】:Should tests and README update be included in commit with a feature?测试和 README 更新是否应该包含在具有功能的提交中?
【发布时间】:2018-07-28 22:30:15
【问题描述】:

我有一个库的 git 存储库,我偶尔会为其添加新功能(或者可能更新现有功能,仍然是相同的步骤)。

每当我这样做时,我需要做三件事:

  • 添加实现
  • 添加测试
  • 更新 README.md

现在我有两个选择:

  1. 将它们全部放在一个提交中:

    • 提交 1:Add FEATURE_NAME + tests + update README.md
  2. 将它们放在三个不同的提交中:

    • 提交 1:Add FEATURE_NAME
    • 提交 2:Add tests for FEATURE_NAME
    • 提交 3:Update README.md for FEATURE_NAME

如果我选择第一个选项,那么如果我认为我的功能不好,那么恢复它会更容易,因为我只需要处理一次提交。

如果我选择第二个选项,它将我的工作分成不同的提交,这是有意义的。

哪个选项更好(或者可能有另一种方式),为什么?

【问题讨论】:

  • 我知道这听起来像是基于意见的,但是像“我应该每月一次将我所有的工作都放到一个提交中并推送它吗?”之类的问题也是如此。虽然它显然有一个符合最佳实践的答案。
  • 还有第三种选择:将它们放在一个特性分支上的三个不同提交中,然后使用--no-ff 合并该特性分支。但我确实认为这太基于意见了,不适合在这里,对不起。所有这三种形式都是常用的,对于这三种形式,可以给出很好的理由,为什么它们最适合某些特定的项目或团队。
  • @hvd 谢谢!如果所有选项都是常用的并且没有适用的良好做法,那么这对我来说是一个足够好的答案。我觉得可能会有其他人在谷歌上搜索这个,因为他们不知道正确的方法,这样的答案(没有正确的方法)无论如何可能会有帮助。甚至列出可能的好选择(我相信有很多不好的方法可以做到这一点)以及优缺点。
  • 您应该将所有内容放在同一个提交中。测试链接到代码,因此没有理由在之后提交它。如果你甚至做 TDD,你甚至可以想象之前提交它。如果您的功能需要修复其他测试,您是否会只提交您的代码,从而破坏测试。不,所以所有事情都需要同时提交。 (并且在 TDD 精神中,代码和测试应该被视为相同的值,因此它不能比您应该首先提交的另一个更重要)。如果应该有多个提交,则应该通过更小的步骤来减少它

标签: git


【解决方案1】:

第一个选项是最常见的选项。
例如“How git changed my commit behavior

git revert 与提交行为有什么关系?好吧,我总是想如果我需要撤消某个更改会发生什么,即恢复相应的提交。换句话说,我考虑了我所做的提交的“可恢复性”。

在您的情况下,最好还原所有三个连贯且紧密耦合的更改。

这符合"coherent state of the code" I was advocating for 7 years ago

【讨论】:

  • 好点,谢谢!我喜欢你在链接答案中提到的git bisect,似乎所有的 git 工具都是为第一个选项而设计的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 2021-07-17
  • 1970-01-01
相关资源
最近更新 更多