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专家。