Git commit squashing(rebase -i):提交实际上如何工作?

时间:2010-07-27 09:07:24

标签: git git-rebase

我不太明白如何使用git rebase -i压缩提交。我有一件事想知道:

如果我的rebase -i产生了这个列表:

pick A Last commit

pick B Commit

pick C Some other commit

我应该压缩提交A和B,B和C吗?问题是git在这种情况下说它会将D..A重新映射到D(D是在此之前的最后一次提交)而不是C..A到C上,这对我来说是有意义的。 D根本没有显示,为什么要这样说呢?

1 个答案:

答案 0 :(得分:5)

问题是git术语中的D..A意味着“从D到A不包括D本身”。如果您查看git-rev-list手册页,您会看到

  

符号“<commit1>..<commit2>”可用作“^<commit1> <commit2>”的简写

表示“列出<commit2>中包含的所有提交,但不包括在<commit1>中。 D所做的更改它本身包含在D提交中。因此它不包含在表示为D..A的列表中。

这就是说git rebase -i D影响D..HEAD的原因是正确的。