Порядок фиксации действительно противоположен тому, что вы обычно видите с git log
, поэтому для:
pick A Penultimate commit
pick B Penult commmit
pick C Latest commit
, если вы измените вторую строку на squash
, Git будет:
- вишневый коммит
A
до начинать создание нового коммита, но пока не делает его; - squa sh коммит
B
до того, как сделать новый коммит; и - вишневый коммит
C
для создания второго нового коммита;
, дающий вам то, что мне нравится рисовать, в виде:
A--B--C [abandoned]
/
...--o--o--AB--C' <-- branch-name
Здесь цепочка A-B-C
- это три исходных коммита, последний из которых нарисован справа (а не сверху или снизу), а новая цепочка AB-C'
- это два новых коммита, опять же, с последним, нарисованным на правильно. Ваше имя ветви использовалось для идентификации коммита C
, а теперь идентифицирует новую копию C'
.
Примечание: слово для третьего от последнего - antepenultimate . «Предпоследний» буквально означает «второй из последних» . Если есть четвертый от последнего, который вам нужно идентифицировать, это preantepenultimate . Похоже, что не существует английского языка - «пятый из последних». Следующие ссылки приводят здесь к propreantepenultimate , но, например, смотрите статус в словаре Коллинза .
Еще одно замечание: интерактивная перебазировка желательна сделать и затем отменить фиксацию, поэтому приведенное выше описание («squa sh перед тем, как фактически делать коммит») является просто кратким обозначением того, что вы увидите при просмотре результатов, а не полным описанием основной механизм. Фактический набор коммитов может включать дополнительные заброшенные временные коммиты. Git со временем все очистит самостоятельно.