Начало работы в GIT
подготовлено редакций сайта
Linux
apt-get install git-core
Mac
brew install git
Windows
Скачивание с сайта
Репозиторий Git — это хранилище, в котором расположен ваш проект и его история. Это может быть локальное хранилище где-то на вашем компьютере или удаленное хранилище на сервисе типа GitHub или другом хостинге в Интернете. Репозиторий служит для отслеживания изменений в проекте, координации работы между несколькими людьми и отслеживания истории проекта.
Скажем, у вас на компьютере есть директория со всеми файлами вашего проекта. Когда вы инициализируете репозиторий Git в этой директории, Git создает скрытую поддиректорию под названием .git, в которой хранится вся информация о репозитории. Эта информация включает историю всех изменений, внесенных в репозиторий, а также его текущее состояние.
Вы можете думать о коммите как о снимке вашего проекта в определенный момент времени. Правда, коммит содержит только информацию об изменениях, которые были внесены в репозиторий с момента последнего коммита. Он не содержит все файлы репозитория (если только это не первый коммит). Таким образом, каждый коммит — это небольшой кусочек истории репозитория, основанный на предыдущем коммите. Все они связаны между собой в цепочку, формируя историю изменений вашего проекта.
Ветка — это параллельная версия репозитория. Ветки позволяют вам работать над отдельными функциями вашего проекта, не влияя на основную версию. Закончив работу над новой фичей, вы можете объединить эту ветку с основной версией проекта.
Если вы никогда ранее не использовали Git, для начала вам необходимо осуществить установку. Выполните следующие команды, чтобы Git узнал ваше имя и электронную почту. Эти данные используются для подписи изменений сделанных вами, что позволит отслеживать, кто и когда сделал изменения в файле.
Мы будем использовать main в качестве имени ветки по умолчанию. Чтобы установить его, выполните следующую команду:
Для пользователей Unix/Mac:
Для пользователей Windows:
Начните работу в пустой директории (например, respositories, если вы скачали архив с предыдущего шага) с создания пустой поддиректории work, затем войдите в неё и создайте там файл hello.html с таким содержанием:
Теперь у вас есть директория с одним файлом. Чтобы создать Git-репозиторий из этой директории, выполните команду git init.
Теперь давайте добавим в репозиторий страницу hello.html
Используйте команду git status, чтобы проверить текущее состояние репозитория.
Отдельный шаг индексации в Git позволяет вам разделять большие изменения на маленькие коммиты. Предположим, что вы отредактировали три файла (a.html, b.html, и c.html).
Теперь вы хотите закоммитить все изменения, при этом чтобы изменения в a.html и b.html были одним коммитом, в то время как изменения в c.html логически не связаны с первыми двумя файлами и должны идти отдельным коммитом. В теории, вы можете сделать следующее:
Вы полностью контролируете то, что отображает log. Мне, например, нравится однострочный формат:
Вот еще варианты просмотра истории:
Все варианты просмотра истории git-log
Вот что я использую для просмотра изменений, сделанных за последнюю неделю.
для большей части работы подходит следующий формат лога.
Таким образом, каждый раз, когда вы захотите посмотреть лог, вам придется много печатать. К счастью, существует несколько опций конфигурации Git, позволяющих настроить формат вывода истории по умолчанию:
Думаю, вы согласитесь, что работать с хешами коммитов напрямую просто неудобно. Разве не
было бы здорово, если бы вы могли обозначать конкретные коммиты понятными для человека
названиями? Таким образом, вы могли бы четко видеть важные вехи в истории проекта. Кроме
того, вы могли бы легко перейти к определенной версии проекта по ее названию. Именно для
этого в Git придумали теги.
Давайте назовем текущую версию страницы hello.html первой, то есть v1.
Теперь текущая версия страницы называется v1.
Обозначим версию, предшествующую текущей, названием v1-beta. Прежде всего, мы переключимся на предыдущую версию. Вместо того чтобы искать хеш коммита, мы будем использовать обозначение ^, а именно v1^, указывающее на коммит, предшествующий v1.
Теперь попробуйте попереключаться между двумя отмеченными версиями.
Вы можете увидеть, какие теги доступны, используя команду git tag.
Вы также можете посмотреть теги в логе.
Убедитесь, что вы находитесь на последнем коммите ветки main, прежде чем продолжить работу.
Используйте команду checkout для переключения в версию файла hello.html в репозитории.
Внесите изменение в файл hello.html в виде нежелательного комментария. Проиндексируйте это изменение.
Проверьте состояние нежелательного изменения.
Команда reset сбрасывает область подготовки к HEAD. Это очищает область подготовки от изменений, которые мы только что проиндексировали.
Команда reset (по умолчанию) не изменяет рабочую директорию. Поэтому рабочая директория всё еще содержит нежелательный комментарий. Мы можем использовать команду checkout из предыдущего урока, чтобы убрать нежелательные изменения в рабочей директории.
Наша рабочая директория опять чиста.
Revert из предыдущего раздела является мощной командой, которая позволяет отменить любые коммиты в репозиторий. Однако, и оригинальный и «отмененный» коммиты видны в истории ветки (при использовании команды git log).
Часто мы делаем коммит, и сразу понимаем, что это была ошибка. Было бы неплохо иметь команду «возврата», которая позволила бы нам сделать вид, что неправильного коммита никогда и не было. Команда «возврата» даже предотвратила бы появление нежелательного коммита в истории git log.
Мы уже видели команду reset и использовали ее для согласования области подготовки с
выбранным коммитом (в предыдущем уроке мы использовали коммит HEAD).
Если выполнить команду reset с указанием ссылки на коммит (т.е. метки HEAD, имени ветки
или тега, хеша коммита), то команда...
Давайте сделаем быструю проверку нашей истории коммитов.
Мы видим, что два последних коммита в этой ветке - «Oops» и «Revert Oops». Давайте удалим их с помощью сброса.
Но прежде чем удалить коммиты, давайте отметим последний коммит тегом, чтобы потом можно было его найти.
Глядя на историю лога (см. выше), мы видим, что коммит с тегом v1 является коммитом, предшествующим ошибочному коммиту. Давайте сбросим ветку до этой точки. Поскольку ветка имеет тег, мы можем использовать имя тега в команде сброса reset (если она не имеет тега, мы можем использовать хеш коммита).