Git: переключиться на локальный репозиторий из рабочего каталога - PullRequest
0 голосов
/ 19 сентября 2019

Насколько я понял, в рабочем процессе git есть три этапа -

  1. Рабочий каталог, который является действительным локальным рабочим пространством проекта с файлом .git.
  2. Промежуточная область, в которую добавляются файлы из рабочего каталога для фиксации.
  3. Локальный репозиторий, куда файлы передаются из области Staging.

Предположим, я зафиксировал несколько файлов из рабочего каталога.Эти переданные файлы будут в локальном хранилище.Теперь мне нужно проверить, все ли необходимые файлы зафиксированы, запустив проект.Как я могу переключиться в локальный репозиторий для запуска кода, чтобы проверить зафиксированные изменения, прежде чем отправлять их на удаленный компьютер?

Например, рассмотрим наличие 3 файлов в рабочем каталоге - one.js, two.js, Three.js и все файлы изменены, но нужно зафиксировать только два из них - one.js и two.js, которые содержат взаимозависимые изменения.Но предположим, что я фиксирую только one.js и забыл зафиксировать two.js, и из-за этого приложение будет повреждено в локальном хранилище.В этом случае мне нужно запустить и проверить приложение из локального репозитория, который содержит только зафиксированные изменения, а не все изменения в отличие от рабочего каталога.Как этого добиться?

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Вы правы, что в git есть три области хранения: рабочее дерево, промежуточная область (иногда называемая индексом) и то, что вы называете локальным репозиторием [1] (коллекция объектов, включая COMMITs, которые составляют историю проекта - обычно называемую базой данных).

Но из них единственным, который вы можете скомпилировать, запустить или загрузить в текстовый редактор, является рабочий каталог.Таким образом, вместо того, чтобы «переключиться на локальный репозиторий», как вы выразились, для запуска фиксированной версии вам потребуется обновить рабочее дерево (или, по крайней мере, 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] «Хранилище» обычно является термином для всего этого - всех трех областей хранения.

1 голос
/ 19 сентября 2019

Предполагается, что git status не говорит:

On branch Master nothing to commit, working tree clean,

, что означает, что у вас есть некоторые незафиксированные изменения, тогда, если вы хотите увидеть состояние только зафиксированного контента, вы можетесохраните сделанные в настоящее время изменения с помощью

git stash,

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

Чтобы вернуть эти изменения, выполните

git stash pop

для получения дополнительной информации о stash смотрите здесь .

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