梗概

虽然Git提供了修改历史commit的方法,但不推荐这种做法,应该尽可能保证所有提交都是正确的、完整的。

不推荐修改历史commit的原因

20%核心原因

Git的操作是基于历史commit的,更改一个历史commit可能会导致后面的commit都需要更改,即可能产生非常多冲突。

80%详细说明

技术风险

  • 修改历史会改变commit的哈希值
  • 可能导致分支历史不一致
  • 团队协作中会造成混乱
  • 需要强制推送,风险较高

协作风险

  • 其他开发者基于旧commit的工作会受影响
  • 可能导致代码丢失或重复冲突

推荐的替代方案

基本原则

  • 应该尽可能保证所有提交都是正确的、完整的
  • 未完成的更改就不要提交,可以暂存或者新开一个分支保存临时的提交

常见场景处理

正在做需求时来了紧急需求

推荐做法

  1. 新建一个分支,暂时保存当前需求的更改为提交
  2. 切换去做另一个更紧急的需求
  3. 哪个需求先完成,就先提交哪个
  4. 其他暂存需求就rebase最新的代码,处理冲突

核心原则谁后提交谁处理冲突

发现已推送的错误提交

  • 已推送且被他人拉取 → 用 [[git的revert命令|git revert]](安全)
  • 未推送或团队可协调 → 用 [[git的reset命令|git reset]](需同步)

相关操作