在历史中压缩多个git提交

时间:2017-01-09 09:41:05

标签: git rebase squash

我有一个大约有3000个提交的存储库,我希望在两个日期之间的历史中间压缩其中的250个,如下所示:

a--b--c--d--e--f--g--h--i--j--k--l--m--n

a--b--c--d'-------------------k--l--m--n

我已经知道d和j的日期和时间。 这样做的最佳做法是什么?

2 个答案:

答案 0 :(得分:0)

假设a是最早的,n是最新的提交:

git rebase方法:

    git rebase <sha_of_d> -i
    # replace *pick* with *squash* for commits e..j
    # save and quit

git merge方法:

    git reset --hard <sha_of_d>
    git merge --squash <sha_of_k>
    git commit
    git cherry-pick <sha_of_l>^..<sha_of_n>

请注意:

  • git reset --hard会丢弃所有未提交的更改。

  • git cherry-pick v1.7.2开始支持
  • git范围。

答案 1 :(得分:0)

你也可以尝试一种与合并方法类似的不同方法。

注意:假设n是最新的,a是最早的提交。

创建一个以k为首的新分支。

git checkout -b new-branch <commit hash of k>

然后,软件将头重置为commit d的父级。

git reset --soft <commit hash of parent of d>

提交更改,因为提交区域中不存在从提交dk的所有更改。 (git status验证)

git commit

合并提交帖子k

git cherry-pick l^...n # Use SHA's of l and n