Git 自动压缩未压缩的提交

Git 自动压缩未压缩的提交,git,Git,我目前只使用了rebase,例如 git rebase -i origin/master 这就带来了我的文本编辑器,然后我用s手动标记除第一次提交之外的所有提交 是否可以在不编辑文本文件的情况下自动执行此操作?如果您只需要共享头部树的新提交,请使用git提交树。也就是说,如果您当前的历史记录如下所示: A-B-C-D-E 你想要什么 A-B-E' 如果E'和E具有相同的内容(这里,B将是源代码/主代码),只需执行以下操作: git reset $( git commit-tree $(

我目前只使用了
rebase
,例如

git rebase -i origin/master
这就带来了我的文本编辑器,然后我用
s
手动标记除第一次提交之外的所有提交


是否可以在不编辑文本文件的情况下自动执行此操作?

如果您只需要共享头部树的新提交,请使用git提交树。也就是说,如果您当前的历史记录如下所示:

A-B-C-D-E 
你想要什么

 A-B-E'
如果E'和E具有相同的内容(这里,B将是源代码/主代码),只需执行以下操作:

git reset $( git commit-tree $(git cat-file -p HEAD | 
    awk '/tree/{print $2}') -p origin/master -m 'Squash')

可能有一种更好的方法来获取头树,它不涉及到到awk的管道,但这应该可以很好地工作。

假设您在
master
(本地一个)上,并且它在一些提交中领先于
origin/master
,您可以这样做:

git checkout -b tempbranch origin/master
git merge --squash master
git checkout master
git reset --hard tempbranch
git branch -D tempbranch
现在,您的
master
分支在
origin/master
之前有一个提交,这是挤压所有以前提交的结果


如果您在一个分支上,这个过程将类似,除了上面的步骤2和步骤3将引用该分支而不是
master
。但是,根据
git merge base mybranch origin/master
origin/master
的相对位置(即,如果
origin/master
在创建分支后已升级),结果可能与预期不符。我们必须更多地了解您的实际分支拓扑,以便在这种情况下提供更好的建议…

我相信这是最好的方法,而不是git专家。