删除旧的提交但保留最近的提交

Removing old commits but keeping recent commits

不久前,我在同事分支的基础上创建了一个分支,并开始进行一些更改。现在,在进行了大约一周的一些更改后,我们发现上周初的一些提交我们想删除,但我们想保留一些最近的提交。

例如,如果提交历史如下所示:

0123456 commit-information
6543210 commit-information
1029384 commit-information
1234567 commit-information

其中 0123456 是最早的提交,1234567 是最近的提交。有没有办法删除前两个提交但保留最后两个提交?

编辑:前两次提交和最后两次提交不相互依赖。

几个选项:

  1. 在您的历史中留下旧的提交,只留下 "remove" 内容

    git revert <sha1> <sha2>
    
  2. "grab" 所需的 2 个提交到目标分支

    # "Apply" the required changes to your branch
    git cherry-pick <SHA1->
    

第三种选择是使用git rebase从分支中删除一些提交

此类命令的通用格式为:

git rebase -p --onto <SHA_First_commit_to_remove>^ <SHA_First_commit_to_keep>^ <branch>

假设您的分支名称是 "mybranch",并且 OP 中的 SHA 命令变为:

git rebase -p --onto 0123456^ 1029384^ mybranch