我有一个大约有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的日期和时间。 这样做的最佳做法是什么?
答案 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>
提交更改,因为提交区域中不存在从提交d
到k
的所有更改。 (git status
验证)
git commit
合并提交帖子k
,
git cherry-pick l^...n # Use SHA's of l and n