壁球未经提交自动提交

时间:2014-05-08 14:21:26

标签: git

我目前只使用rebase,例如

git rebase -i origin/master

这给我带来了我的文本编辑器,然后我用s手动标记所有提交,除了第一次提交。

是否可以自动执行此操作,而无需编辑文本文件?

2 个答案:

答案 0 :(得分:2)

假设你在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已提升)。我们必须更多地了解您的实际分支拓扑,以便在这种情况下提供更好的建议......

答案 1 :(得分:1)

如果您只想要一个共享HEAD树的新提交,请使用git commit-tree。也就是说,如果您当前的历史记录如下:

A-B-C-D-E 

你想要

 A-B-E'

E'和E具有相同的内容(这里,B将是origin / master),只需:

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

这可能是一种更好的方法来获得不会涉及到awk管道的HEAD树,但这应该可以正常工作。