当rebase是no-op时,压缩git提交

时间:2012-12-10 15:20:22

标签: git rebase squash

我正在尝试将一些提交压缩到我希望贡献的github项目的pull-request-ready包中,但使用git rebase -i master并没有给我我期望的选项(基于阅读StackOverflow和其他地方。这是我第一次尝试压缩提交,所以我可能只是遗漏了一些东西。

该项目的历史有以下几点:

# On branch master
git pull origin master
git fetch upstream
git rebase upstream/master
git checkout -b feature
git commit -m "some work"
git commit -m "a little more work"
git commit -m "finishing up feature"
git checkout master
git pull origin master
git fetch upstream
git rebase upstream/master
git checkout feature

此时原点/主站或上游/主站没有变化,因此即使没有重新定位,我的功能分支也与原点和上游都是线性的。当我执行git rebase -i master时,我弹出的编辑器中没有列出任何提交,这完全是空白的,并且rebase的输出是Successfully rebased and updated refs/heads/feature

我知道我可以使用

git checkout master
git merge --squash feature

但我的理解是,如果我这样做,我将失去所有的历史。

还有另一种方法可以实现我想要的,或者我只是错过了显而易见的东西?

更新

我期望看到的是一个编辑器,其中包含我在我的功能分支中列出的提交,以便我可以选择要选择哪些以及哪些要压缩。我实际看到的是一个空编辑器,这让我想知道是因为我当前的分支是否与我的主分支线性相关,所以不需要重新设置任何东西,因此编辑器中没有提交任何提交(尽管我想我本来希望得到一个“没有什么可以改变”的消息,而不是上面提到的成功消息)

1 个答案:

答案 0 :(得分:0)

正如评论中所指出的那样,问题根本不在于git rebase -i master命令,而在于我的编辑器,它没有处理来自git的输入以正确显示可用的提交。

更改为其他编辑器解决了此问题。