Разбиваются ли висячие шарики 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-объектам (представляющим содержимое отдельных файлов) и другим деревьям.
Таким образом, только объекты, достижимые от объекта корневого дерева, передаются вместе с коммитом, который ссылается на этот объект дерева; это делается для каждого коммита, который передается в удаленный репозиторий. Висячие объекты по определению недоступны, поэтому они не переносятся.