挤压历史记录中的多个git提交 我有一个大约3000个提交的库,我想在这两个日期之间在历史中间挤下其中的250个:

挤压历史记录中的多个git提交 我有一个大约3000个提交的库,我想在这两个日期之间在历史中间挤下其中的250个:,git,rebase,squash,Git,Rebase,Squash,a--b--c--d--e--f--g--h--i--j--k--l--m--n a--b--c--d'------------k--l--m--n 我已经知道了d和j的日期。 执行此操作的最佳实践是什么?假设a是最早的提交,n是最新的提交: git-rebase方法: 请注意: git reset--hard将丢弃所有未提交的更改 从gitv1.7.2开始,支持git cherry pick范围 您也可以尝试一种与合并方法类似的不同方法 注意:假设n为最新提交,而a为最早提交 创建一个以提交

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

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

我已经知道了d和j的日期。
执行此操作的最佳实践是什么?

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

git-rebase
方法: 请注意:

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

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


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

注意:假设
n
为最新提交,而
a
为最早提交

创建一个以提交
k
为头的新分支

git checkout -b new-branch <commit hash of k>
提交更改,因为从提交
d
k
的所有更改都不在暂存区域中。(
git状态
验证)

合并提交帖子
k

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

也许你是对的,但找不到更好的方法。另外,如果你使用
vim
,请使用以下命令:
:%s/pick/squash/g
替换所有
pick
squash
,谢谢。这是可行的,但会提示我输入squash,大约250次提交。我可以传递一系列的提交吗?对于这些提交,在选择其他提交的同时必须进行挤压?不幸的是,不行,
git-rebase
可以从
HEAD
开始进行提交。另一个选择是使用
git-merge-squash
,但我觉得这更痛苦。这就是我一直在寻找的。非常感谢。
git checkout -b new-branch <commit hash of k>
git reset --soft <commit hash of parent of d>
git commit
git cherry-pick l^...n # Use SHA's of l and n