git

Git Delete one commit

Posted by keming on August 9, 2021

问题描述

  • 在实际工作环境,会出现这种场景:
    • 某个人的commit带了bug,但是短期内无法解决;
    • 某个人传了个大文件,想删掉,但是后面又跟了很多其他commit;
  • 首先说明,大文件直接git rm有问题,历史记录会一直有。
  • 解决方案只有一个:删掉这个commit。

怎么删呢

  • 如果提交记录是这样,A/B/C/D都当做commit id:
    • A –> B(Dirty) –> C –> D(HEAD)
1. Git Revert
git revert B
// 如果有多个
git revert B1..B2
  • 这样会在D 后面追加commit。
2. Cherry pick
git checkout -b new_branch A
git cherry-pick C
git cherry-pick D
// 或者可以写成
git checkout -b new_branch A
git cherry-pick C..D
  • https://git-scm.com/docs/git-cherry-pick
  • 这样会新建一个分支
3. History rewrite
git rebase -i
// 通过挑选commit,合并commit的方式处理

推荐

  • 没啥特殊要求的话用revert吧,主要还是安全。