Вы правы, что в git есть три области хранения: рабочее дерево, промежуточная область (иногда называемая индексом) и то, что вы называете локальным репозиторием [1] (коллекция объектов, включая COMMIT
s, которые составляют историю проекта - обычно называемую базой данных).
Но из них единственным, который вы можете скомпилировать, запустить или загрузить в текстовый редактор, является рабочий каталог.Таким образом, вместо того, чтобы «переключиться на локальный репозиторий», как вы выразились, для запуска фиксированной версии вам потребуется обновить рабочее дерево (или, по крайней мере, a рабочее дерево - их может быть несколько).) в соответствии с подтвержденной версией.
Как именно это сделать, зависит от обстоятельств, и ситуация, которую вы изложили, на самом деле немного странная (и может вызвать у вас другие, не связанные с этим проблемы), из-за которой трудно датьподробный ответ.
Прежде всего, идея, что «я изменил 3 файла, но нужно зафиксировать только 2 из них» ... Это обычно признак проблемы, ожидающей своего появления.Если третий файл вообще отсутствует в репо и указан в .gitignore
, это может быть нормально;но при прочих равных условиях вам лучше, когда ваше рабочее дерево как можно ближе к тому, чтобы быть просто отражением контента, который вы фиксируете.
Если этот третий файл не зафиксирован / игнорируется, тоВы можете использовать git status
, чтобы подтвердить, совершили ли вы все остальное.Он сообщит вам, в каких файлах были поэтапные изменения, какие нетэгированные изменения, которые никогда не были зафиксированы и т. Д. Вы можете использовать git diff
, чтобы получить более подробную информацию о том, какие изменения не были внесены (или git diff --staged
, чтобы увидеть те, которые были поставлены, но не зафиксированы).
Но чтобы действительно знать, что то, что вы зафиксировали, работает, вам нужно «проверить» подтвержденную версию.
Если у вас нет незафиксированных изменений, которые вам нужно сохранить, это легко - git status
расскажет вам, как вернуться к зафиксированному состоянию.(Как правило, git reset -- :/:
, а затем git checkout -- :/:
сработает.)
Если у вас есть незафиксированные изменения, которые вам нужно сохранить, вы можете их спрятать (но есть крайние случаи, когда это может не соответствовать вашим намерениям).- например, если у вас есть как поэтапные, так и неустановленные изменения, вы можете оказаться в ситуации, когда вы вернете их всех без обработки).См. https://git -scm.com / docs / git-stash
. Или вы можете использовать отдельный клон репозитория для тестирования.Это типично для серверов сборки, но также может быть выполнено локально.Немного более легкое решение состоит в том, чтобы создать второе рабочее дерево, присоединенное к существующему репо.Документы, поддерживающие эти параметры:
https://git -scm.com / docs / git-stage https://git -scm.com / docs / git-worktree
[1] «Хранилище» обычно является термином для всего этого - всех трех областей хранения.