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

Mak*_*kis 2 git git-rebase

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

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

pick A Last commit

pick B Commit

pick C Some other commit
Run Code Online (Sandbox Code Playgroud)

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

P S*_*ved 5

D..A事实上,在git术语中意味着"从D到A不包括D本身".如果您查看git-rev-list手册页,您会看到

符号" <commit1>..<commit2>"可以被用作短手" ^<commit1> <commit2>"

这意味着"列出包含<commit2>但不包括在内的所有提交<commit1>.并且自己所做的更改D都包含在D提交中.因此它不包含在列表中D..A.

这就是为什么说这种git rebase -i D影响是正确的D..HEAD.