2010-07-27 59 views
2

我不太明白提交是如何用git rebase -i压扁的。有一两件事,我在想:Git commit squashing(rebase -i):提交实际上如何工作?

如果我的底垫-i产生这个名单:

pick A Last commit 

pick B Commit 

pick C Some other commit 

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

+0

不知道为什么你问我们是否应该挤压A和B或B和C - 挤压你想挤压的两个! – Cascabel 2010-07-27 12:16:47

+0

我的意思是,这种方式工作?如果我留下两个镐并将其中的一个标记为南瓜,那么这些变化会在哪里被压扁? – Makis 2010-07-27 12:44:35

+1

一个提交将被压缩到前一个 - 它在列表中的一个。 (顺便说一句,我不知道为什么你有相反的顺序你的名单...) – Cascabel 2010-07-27 16:47:02

回答

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是正确的。