2010-07-27 89 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是正確的。