【问题标题】:Is there any way to incrementally build commit messages in git?有没有办法在 git 中增量构建提交消息?
【发布时间】:2011-06-15 12:34:16
【问题描述】:

我想知道是否可以逐步构建 git 提交消息,记录我在更改代码时所做的事情:

  1. 退房并开始工作
  2. 输入提交消息标题(即摘要)
  3. 更改代码
  4. 更新我的提交消息以描述更改
  5. 重复 3 和 4 直到提交准备就绪

git 中是否有内置机制来做到这一点?

【问题讨论】:

  • 这更多是关于偏好而不是客观性,但我认为您的提交不应大到足以要求这样做。当需要回滚或查看更改历史时,小的、有凝聚力的提交是天赐之物。
  • 除了频繁的修改建议外,您还可以使用 rebase 将所有有问题的提交压缩在一起(可能使用 fixup/autosquash 功能)。
  • 类似问题,甚至可能重复:stackoverflow.com/questions/3743999/…
  • 小型的原子提交绝对是首选。但甚至可以在几天或几周内处理小型原子提​​交,具体取决于项目获得的关注程度。我通常的目标是在一天的工作中很好地适应原子性,但有时它就是这样行不通的。

标签: git commit messages


【解决方案1】:

如果你真的想这样做(虽然我不建议你这样做),那么试试这个:

  1. 退房并开始工作
  2. 进行一些代码更改
  3. git commit
  4. 进一步修改代码
  5. git commit --amend
  6. 重复 4 & 5
  7. git commit --amend --reset-author 进一步重置时间戳

【讨论】:

  • 这对解决问题很有效,但是确保提交不会被推送到任何公开的地方,然后再修改!
【解决方案2】:

git commit 可以使用-F 选项从文件中获取提交消息。所以,你可以这样做:

# Do some work
$ echo 'Did some work' > commit-msg.txt
# Do some more work
$ echo 'Did some more work' >> commit-msg.txt
$ git commit -F commit-msg.txt

【讨论】:

  • 非常好 - 如果这个文件没有被暂存,或者位于存储库之外,这是对 skco 指出的次优情况的一个很好的解决方案。谢谢!
  • @medicdave:如果你这样做,而不是修改/压缩,你可以将 commit-msg.txt 添加到 .git/info/excludes,这样它就会在这个存储库中被忽略,防止您意外上演。
【解决方案3】:

您应该为每一个需要消息的小更改进行提交。这对于您正在使用的分布式版本控制系统(如 git)来说尤其容易。

  1. 退房并开始工作
  2. 更改代码
  3. 输入提交信息并提交
  4. 重复 2 和 3
  5. 推送更新

如果您出于某种原因不喜欢这种模式并希望按照您描述的方式进行操作,只需使用记事本并在编码一段时间后附加到您的消息中,然后在提交时复制粘贴它。

【讨论】:

  • 这样做的好处是可以列出每次提交的实际增量更改(而不是一个大的更改)。
  • 理想情况下,是的,情况就是这样。但有时小的更改可能会破坏其他领域的代码(尤其是在维护耦合性较差的代码时,ahem 肯定是由其他人编写的),需要与原始更改无关的返工。在这种情况下,对小原子提交的需求与只提交工作的、经过测试的代码的需求是不一致的。在这些情况下,您最终会仔细研究差异,以便在进行更改后编写有用的提交消息。
  • @medicdave 这就是主题分支的用途。每个小的提交都可能破坏构建,但是您会与 master 进行非快进合并,因此 master 上的所有提交都是干净的并通过了测试套件。
  • @WilliamPursell 好电话...我最近开始使用 git-flow(并且喜欢它!),因此我对 Git 分支工作流程的理解有了显着提高!
猜你喜欢
  • 1970-01-01
  • 2011-09-07
  • 2011-02-17
  • 1970-01-01
  • 2019-12-11
  • 2015-11-29
  • 2020-03-14
  • 2016-09-08
  • 2021-04-03
相关资源
最近更新 更多