Сохранится ли история после git Squash?

Как известно, git хранит историю, но что будет в этом варианте:

Я создаю новую ветку, пушу в нее 10 изменений и RSA ключ, к примеру, одним коммитом. Потом другим коммитом удаляю RSA ключ.

Если я сделаю обычный merge из нее в мастер, ключ останется в истории, а в случае со squash?


Ответы (1 шт):

Автор решения: Roman Konoval

Оригинальные коммиты не будут присутствовать в истории мастера. Там будет создан один коммит с суммарными изменениями. Так что в истории мастера ключа не будет.

Но если ничего не делать, то коммиты останутся в репозитории, так как на них ссылается оригинальная ветка, из которой вы сливали изменения в мастер. Если вы после merge с опцией --squash удалите ветку, которую сливали, а также все другие ветки, которые используют эти коммиты, то такие коммиты станут недостижимыми (т.е. мусором). Значит, если вы почистите мусор с помощью git gc (или это произойдет автоматически), то оригинальные коммиты будут удалены.

Нужно понимать, что этим вы измените только локальный репозиторий. Вы можете удалить соответствующую ветку в remote репозитории, но изменения из нее уже мог запулить кто-то в свой репозиторий. Так что, если вы уже запушили эти коммиты, то нет никакой гарантии, что в других репозиториях они будут почищены.

→ Ссылка