有没有办法以非交互方式变基和压缩我的功能分支中的所有内容?

Is there a way to non-interactively rebase and squash everything in my feature branch?

有时我在功能分支中有一堆小的提交,我想将它们全部压缩在一起,但还没有合并到父分支中。

我知道我可以(在这个例子中父分支是master):

git rebase -i master

然后在第一个之后将所有提交标记为 "squash"。

有没有办法以非交互方式获得相同的结果?

本质上,我想创建一个新的提交,其树与现在位于我的功能分支头部的树相同,并且其父级是我指定的祖先提交(例如:master),然后更改功能分支以指向该新提交。永远不应该有任何冲突(我偶尔会得到一些 rebase -i),并且 -m 应该是完全非交互的。理想情况下,如果没有 -m,提交消息应该默认为被压缩的提交的串联。

我该怎么做?

我对壁球的看法是使用 git reset --soft。假设您想压缩最后 5 次提交:

git reset --soft HEAD~5
git commit -m "Feature X"

而且,如果您还想对(几乎)一次完成的所有操作进行变基,您仍然可以使用 git reset --soft

来完成

How to squash/rebase in a single shot