我用:

git checkout -b testbranch

我做了20次提交。

现在我想要压缩这20个提交。我是这样做的:

git rebase -i HEAD~20

如果我不知道有多少次提交呢?有没有什么方法可以做到:

git rebase -i all on this branch

当前回答

另一种解决方案是将所有提交日志保存到一个文件中

分支> git 日志.log

现在branch.log将拥有自开始以来的所有提交id。向下滚动并进行第一次提交(这在终端中很困难) 使用第一次提交

Git复位-软

所有提交都将被压缩

其他回答

另一种解决方案是将所有提交日志保存到一个文件中

分支> git 日志.log

现在branch.log将拥有自开始以来的所有提交id。向下滚动并进行第一次提交(这在终端中很困难) 使用第一次提交

Git复位-软

所有提交都将被压缩

你可以通过子命令来实现

$ git rebase -i HEAD~$(git rev-list -count HEAD ^master)

这将首先计算从master分离后的提交次数,然后将其还原到确切的长度。

如果你使用基于IDE的JetBrains,如IntelliJ Idea和prefare,使用命令行GUI:

进入版本控制窗口(Alt + 9/Command + 9) -“日志”选项卡。 在树中选择创建分支的点 右键点击它->重置当前分支到这里->选择软(!!)(重要的是不要失去你的变化) 按下对话框窗口底部的重置按钮。

就是这样。您未提交所有更改。现在如果你重新提交,它会被压缩

为了完善一下Caveman的回答,使用git reset——soft <commit>。从文档中,这个命令:

根本不触及索引文件或工作树(但将头部重置为<commit>,就像所有模式一样)。这将使所有更改过的文件都变成“要提交的更改”,就像git状态所显示的那样。

换句话说,它将撤销到<commit>之前的所有提交。但是它不会改变工作目录。您最终会得到所有的更改,这些更改都是未分期和未提交的。就好像那些介入的提交从未发生过一样。

例子:

# on master
git checkout -b testbranch
# make many commits
git reset --soft master
git add .
git commit -m 'The only commit.'

此时,您仍然在testbranch上,它只有一次提交。像往常一样合并到master中。

在我的手中,Caveman回答的第一部分(git rebase -i)并没有压缩提交。

如果你可以接受涉及另一个分支的答案,尝试git checkout——orphan <new_branch>它允许我简单地将前一个分支的所有文件作为一个提交。

这有点像git的合并压缩,但不完全相同。