Git commit squashing (rebase -i): как на самом деле работают коммиты? - PullRequest
2 голосов
/ 27 июля 2010

Я не совсем понимаю, как коммиты подавляются с помощью 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 Ответ

5 голосов
/ 27 июля 2010

Дело в том, что D..A в терминологии git означает «от D до A, не включая сам D».Если вы заглянете на страницу git-rev-list руководства, вы увидите, что

обозначение "<commit1>..<commit2>" может использоваться как сокращение для "^<commit1> <commit2>"

, что означает «перечислить все коммиты, которые включены в <commit2>, но не включены в <commit1>. И изменения, сделанные самим D, включены в Dcommit . Таким образом, он не включен в список, обозначенный как D..A.

. Поэтому правильно сказать, что git rebase -i D влияет на D..HEAD.

.
...