在提交时使用Git amend,而不是创建多个提交
根据我的理解,在提交时使用Git amend,而不是创建多个提交,git,Git,根据我的理解,git commit--amend可以用来修改未完成的提交,以达到可理解的状态,修复拼写错误等。但是,有时它可能(错误地?)被用作保持提交历史记录更清晰的银弹(类似于压缩合并) 一位工程师只是假设,当在本地(分支上)开发一个复杂的特性时,他们在一个相同的提交上反复使用git commit--amend,直到特性完成为止。例如: 第一次提交:创建函数A和B的存根 第一次提交时第一次修改:功能A已实施 第一次提交第二次修改:功能B已实施 第一次提交时第三次修改:添加服务X 这样做的
git commit--amend
可以用来修改未完成的提交,以达到可理解的状态,修复拼写错误等。但是,有时它可能(错误地?)被用作保持提交历史记录更清晰的银弹(类似于压缩合并)
一位工程师只是假设,当在本地(分支上)开发一个复杂的特性时,他们在一个相同的提交上反复使用git commit--amend
,直到特性完成为止。例如:
- 第一次提交:创建函数A和B的存根
- 第一次提交时第一次修改:功能A已实施
- 第一次提交第二次修改:功能B已实施
- 第一次提交时第三次修改:添加服务X
- 第一次提交:创建函数A和B的存根
- 第二次提交:实现功能A
- 第三次提交:实现功能B
- 第四次提交:添加服务X
git push--force
,--amend
在提交被推送后将不再工作。在团队中工作时,它很可能也会导致问题
您认为使用“修正”来保持历史记录的干净是一种有效的方法,还是可以将其视为给定示例的反模式?可以将挤压合并理解为更准确的干净历史记录的方法。考虑这种情况
dothishing
,用对dothishing
的调用替换3个基本相同的代码块,然后提交更改
dotshithing
,因此您更正了拼写错误
dotshithing
更改为dotshithing
值得单独提交,而不仅仅是在步骤1中修改提交以更正拼写
如果您共享提交,查看该提交的任何人都不可能也不需要知道您最初是否拼错了函数名。单独的第二次提交不会向查看提交历史的任何人传达任何有用的信息。git commit--amend真正做的是非常简单的。它实际上不会更改任何提交,也不会更改任何使用it仍在进行多次提交。不幸的是,要真正理解这一点有点复杂。不过,你要问的是一个完全不同的问题:什么时候这是一个好主意,什么时候不是一个好主意
你想问的问题没有一个明确的答案:这是一个观点问题,因此不是关于StackOverflow的话题。除此之外,这是一个更大问题的一部分,这个问题甚至更模糊:一次提交中工作的适当粒度是什么
我们也确实无法回答这个问题,但我们可以采取技术方法来回答辅助问题,这些问题将反馈到最终的基于意见的答案中。具体来说,我们可以查看每个提交是什么,以及为我们做了什么。这使我们有点特定于Git,尽管其他版本控制系统中的提交通常是至少在效果方面非常相似(即使基础机制非常不同):
- 提交表示组成系统的所有文件的快照
- 提交包含一些元数据:谁做了这件事,什么时候,也许最重要的是为什么。为什么部分以提交消息的形式出现
- 在Git中,历史记录是提交。Git通过将自己特定于Git的元数据以及用户提供的为什么存在此提交消息推入提交中来实现这一点
- 使用存储库中提交的历史记录,在Git的情况下,我们可以让我们的计算机自动完成几件事情。这里我要特别指出的两件事是:
- 生成日志(无论出于什么目的:只是为了阅读以提醒我们自己,或者为发行说明构建更改日志,或者其他任何目的)
- 自动化测试并进行二等分以查找bug