Разбиваются ли висячие шарики git add в главный репозиторий?

Мы можем восстановить файлы, которые были когда-то добавлены (но не зафиксированы), а затем удалены с помощью git reset --hard. См. Восстановление добавленного файла после выполнения git reset --hard HEAD^

Когда мы добавляем наши изменения в какой-то вышестоящий репозиторий, эти объекты тоже добавляются?

Контекст: Во время любой разработки я иногда делаю git add для измененных файлов, но не фиксирую их. В этот раз я сделал git add с некоторыми критически важными учетными данными api, и мне было интересно, можно ли их восстановить из журналов, если мне когда-нибудь понадобится открыть репо / гем.

2 ответа

Решение

Нет, капли, которые не были переданы (или явно переданы), никогда не передаются по проводам.

Если вы добавили файлы и не зафиксировали их, они должны быть удалены при следующем вызове git gc, Однако, если вы зафиксировали их, а затем снова удалили фиксацию (например, через git rebase или git reset), они не будут собраны, потому что они доступны через reflog Git. Но reflog является локальным механизмом и не будет опубликован с git push,

Git только когда-либо передает объекты, связанные друг с другом, начиная с некоторого объекта коммита.

Так как можно только выдвигать объекты фиксации (независимо от того, называете ли вы их напрямую, используя их имена SHA-1 или косвенно через имена браков или тегов), Git передает коммиты, и каждый коммит ссылается на один объект дерева, представляющий корень хранилище, которое само по себе относится к BLOB-объектам (представляющим содержимое отдельных файлов) и другим деревьям.

Таким образом, только объекты, достижимые от объекта корневого дерева, передаются вместе с коммитом, который ссылается на этот объект дерева; это делается для каждого коммита, который передается в удаленный репозиторий. Висячие объекты по определению недоступны, поэтому они не переносятся.

Другие вопросы по тегам