我一次只能压缩2次提交吗?

时间:2015-12-06 06:06:14

标签: git git-merge git-rebase

当我尝试以交互方式将几个提交重新绑定(压缩)为一个提交时,它只会压缩最后两个提交,因此我最终不得不多次进行压缩。

我正在使用源代码树,但我尝试从控制台执行此操作并获得相同的结果。有什么想法吗?

4 个答案:

答案 0 :(得分:7)

尝试 -

$ git rebase -i HEAD~4

然后

pick 01d1124 commit msg 1
squash 6340aaa commit msg 2
squash ebfd367 commit msg 3
squash 30e0ccb commit msg 4

保存并退出编辑器

你可以在Sourcetree中做同样的事情 -

http://kwnetzwelt.net/wordpress/archives/2440

答案 1 :(得分:2)

(交互式)rebasing 技术上一次只压缩两次提交 - 仅仅因为所谓的" rebase脚本"通常会要求您在git rebase收益之前进行编辑,同时将操作应用于单个提交。

然而,这并没有改变结果,因为从逻辑上讲,一次压缩N次提交或执行此提交提交之间没有区别。 在您的rebase脚本中,您只需选择动作"壁球" (也读了" fixup" -it'对于一系列相邻的提交,通常可能比#34; squash")更方便,然后git rebase就像这样:

  1. 获取标记为"壁球"的提交。将其压缩到之前的提交 - 有效地重新编写应用了新内容(与git apply一样)。
  2. 鉴于新状态,请转到步骤1.; - )
  3. 请注意,--squash的{​​{1}}命令行选项也是如此。 这个实际上一次压制了几个提交。

答案 2 :(得分:1)

鉴于您的分支指向您想要压缩的最后一个提交,您可以使用此技巧:

git reset --soft <some older commit>
git commit --amend

您现在已将<some older commit>替换为包含两者之间的所有内容的新timediff('date1','date2') 及其内容。

答案 3 :(得分:0)

壁球

这正是交互式rebase的用途。

您使用git rebase -i @~x,其中x代表您希望压缩的提交数量。

然后会为您打开一个对话框,您可以选择提交以及您希望每次提交的内容。

enter image description here