git给了我太多的rebase选项

时间:2012-01-13 19:35:06

标签: git git-rebase

当我进入时:

git rebase -i HEAD~3

我没有看到最后3次提交,而是看到了最后的10次。

由于某种原因,其中N是传入的数字,如果2 <= N <= 10,我看到10个选项。如果N = 1,我只看到最后一次提交。

这引出了两个问题: 有谁知道为什么会这样? 有谁知道我怎么能把N变为3?在进一步的提交中会出现很多冲突,我不想反对它们。

对于一些上下文: 我有一个git“功能分支”,它只是一个补丁,允许一些遗留代码在Mac上本地工作。它解决了一个仍在生产的古老Drupal装置的一些问题。我一直在修改它以进行本地开发,然后将其重新设置为提交,以便它可以在暂存环境中进行测试。它工作得很好......直到现在。

1 个答案:

答案 0 :(得分:3)

您所看到的关键是rebase的实际行为以及修订说明符~。   我从http://schacon.github.com/git/git-rev-parse.html#_specifying_revisions得到了这个树结构以及~如何工作的信息。

以下历史图表是Jon Loeliger的插图。提交节点B和C都是提交节点A的父节点。父提交从左到右排序。:

G   H   I   J
 \ /     \ /
  D   E   F
   \  |  / \
    \ | /   |
     \|/    |
      B     C
       \   /
        \ /
         A

正如我所提供的页面所指示的那样,~指的是第三祖父母,祖父母将成为任何合并的第一个父母。如果您所在的分支HEAD - &gt; A并指定HEAD~3作为您的修订版,则指向G

所以rebase -i HEAD~3会说您希望以交互方式将所有提交从G改为A G。这意味着您将看到所有其他提交作为rebase流程的一部分,因此您将D和{{1}而不仅仅是BAA-F。在rebase列表中。这将是列出的8个不同的提交与3。