使用交互式rebase

时间:2015-07-02 12:21:48

标签: git version-control

我正在使用git处理一项功能,到目前为止我已经完成了以下步骤。

  • 根据feature1
  • 结帐新的功能分支master
  • 添加几个提交。
  • 根据test结帐新分支feature1
  • test中执行一些更改。
  • 返回(结帐至)feature1分行。
  • test分支合并到feature1
  • 删除test分支
  • 编辑文件,并修改最后一次提交以反映更改

这是git log --oneline -n 5输出

de5d701 Merge branch 'test' into 'feature1' (amended)
a668f93 'feature1' commit3
ded7c00 'feature1' commit2
8731807 Initial 'feature1' commit
ff2f539 latest 'master' commit

我希望在合并到ff2f539 latest 'master' commit之前压缩master之后的所有内容。我试图执行

git rebase --interactive  ff2f539

但编辑器中未列出最新提交:

pick 8731807 Initial 'feature1' commit
pick ded7c00 'feature1' commit2
pick a668f93 'feature1' commit3

# Rebase ff2f539..de5d701 onto ff2f539
#
# Commands:
...
# Note that empty commits are commented out

我无法理解为什么跳过由test分支到feature1分支的合并产生的最新提交。 使用以下内容保存和退出编辑器:

pick 8731807 Initial 'feature1' commit
squash ded7c00 'feature1' commit2
squash a668f93 'feature1' commit3

# Rebase ff2f539..de5d701 onto ff2f539
#
# Commands:
...
# Note that empty commits are commented out

生成新提交,但不提供上次提交的更改

de5d701 Merge branch 'test' into feature1(amended)

他们迷路了。有什么帮助如何在合并到master之前将所有这些提交压缩成一个提交?

2 个答案:

答案 0 :(得分:1)

Git没有按设计在“交互式”列表中显示合并提交。它包含了由该合并引入分支的所有提交。您可以使用-p--preserve-merges)选项来更改该行为,但不建议在交互模式下使用,因为结果可能不那么明显(请参阅http://git-scm.com/docs/git-rebase#_bugs)。

但是有一个没有变基的简单解决方案:

# make sure your working copy is clean, do git stash if needed
git checkout feature1
git reset --soft ff2f539
git commit -m "..."

这将生成一个提交,包括ff2f539之后的所有更改。

答案 1 :(得分:0)

如果要在rebase中包含合并提交,请将--preserve-merges选项传递给git rebase