Git checkout обновляет все файлы?
Новый вопрос, я хочу убедиться, что я понимаю это.
Когда я git checkout <revision>
это возвращает весь проект к его состоянию в тот момент, или он только воссоздает файлы, измененные в этой конкретной ревизии?
Например: если моя папка была полностью пустой, кроме репозитория.git, и я git checkout master
Будут ли полученные файлы представлять собой проект целиком или только файлы, измененные при последнем коммите?
Я спрашиваю, потому что я проверяю свой проект в различных точках (начиная с самого начала), и вместо того, чтобы проект медленно увеличивался в размере, как можно было бы ожидать, размер каждой проверки изменялся довольно сильно.
2 ответа
Когда я
git checkout <revision>
это возвращает весь проект к его состоянию в тот момент, или он только воссоздает файлы, измененные в этой конкретной ревизии?
Если ваше рабочее дерево и область подготовки полностью пусты (кроме .git
подкаталог, конечно) и вы запускаете
git checkout <revision>
тогда ваше рабочее дерево и область подготовки будут точно отражать содержание этой конкретной ревизии.
С другой стороны, если ваше рабочее дерево не пусто при запуске git checkout
то, что происходит, гораздо более тонко и может быть разбито на три случая:
- Оформить заказ не составляет проблем, и Git выполняет его, не отрывая веки: содержимое этой конкретной ревизии копируется в ваше рабочее дерево (и, при необходимости, перезаписывает уже имеющиеся там материалы). Или же
- Проверка, если она будет выполнена, приведет к потере локальных изменений; поэтому, Git (при условии, что вы не использовали
-f
флаг) отключает и отменяет оформление заказа. Или же - Может возникнуть более сложная ситуация, при которой материал извлекается только частично, а некоторые локальные непринятые изменения сохраняются в вашем рабочем дереве и / или индексе. Более подробную информацию об этой ситуации можно найти в моем ответе на вопрос: Почему неопубликованные изменения все еще присутствуют после проверки другой ветки?,
[...] размер каждой проверки варьируется довольно сильно.
Вы принимаете во внимание неотслеживаемые файлы? Вы зафиксировали, а затем удалили большие файлы? На основании информации, приведенной только в вашем вопросе, мы можем лишь немного предположить причину, по которой размер сильно варьируется.
Из документации: "Обновляет файлы в рабочем дереве, чтобы они соответствовали версии в индексе или указанном дереве". В случае вашего примера он вернет хранилище в состояние во время извлечения полностью.
Однако, как отметил Jubobs, в поведении есть разница, если вы внесли какие-либо изменения в состояние своего хранилища с момента последней проверки. Его ответ более полный, чем мой, если это так.
Также обратите внимание, что это будет применяться только к файлам, которые отслеживаются git, поэтому любые другие файлы, которые у вас есть, не будут затронуты.