Зачем нужен git gc - PullRequest
       2

Зачем нужен git gc

0 голосов
/ 26 октября 2018

Говорят, что во время сбора мусора в git каждый просматривает график коммитов и отмечает их.

Будут удалены все неотмеченные коммиты, которые называются GC.

Вопрос в том, как получаются неотмеченные коммиты? Я не могу решить, как такие коммиты могут существовать?

1 Ответ

0 голосов
/ 26 октября 2018

Прежде всего, стоит отметить, что вам обычно не нужно запускать git gc - git автоматически запускает сборку мусора при определенных условиях. git gc просто заставляет это произойти немедленно.

Коммиты в git являются неизменяемыми, что означает, что любая операция, которая, кажется, изменяет коммит, на самом деле просто создает новый коммит. Например, если вы должны были сделать:

$ git add my-file
$ git commit
$ git add another-file
$ git commit --amend

Похоже, что последний коммит был изменен, но на самом деле был создан просто новый коммит.

Это означает, что на старый коммит больше ничего не ссылается. Потенциально Git может избавиться от старого коммита сразу, но это не так. Это может быть очень удобно, когда вы совершаете ужасную ошибку, потому что вы можете вернуть свой старый коммит.

Еще одной распространенной операцией, которая, по-видимому, изменяет коммиты, является rebase. В действительности все, что это делает, это создает новые коммиты в какой-то другой точке дерева, которые применяют те же изменения, и оставляя старые коммиты без ссылок.

Еще один способ получить не имеющие ссылок коммиты (также называемые висячими коммитами), которые можно собирать мусором, - это если на коммиты ссылаются только тег или ветвь (например, ветвь, которая не была объединена с мастером) и тег или ветка удалены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...