Как начать работать с git

Git — это распределенная система контроля версий, которая помогает разработчикам отслеживать изменения в коде, работать в команде и управлять историей проекта. Она позволяет сохранять разные версии файлов, возвращаться к ним при необходимости и совместно работать над одним проектом без потери данных.

Использование git значительно упрощает работу над сложными проектами, обеспечивает прозрачность изменений и помогает избегать конфликтов при совместной работе.

В этом руководстве рассмотрим основные команды для работы с git без использования графического интерфейса:

  1. Подготовка к работе.
  2. Работа с репозиторием.
  3. Работа с ветками.
  4. Коммиты.
  5. Отправка изменений.
  6. Решение конфликтов.
  7. Дополнительные команды.

Перед началом работы

Установите git:

  1. Скачайте git с официального сайта.
  2. Запустите установочный файл и следуйте указаниям мастера установки.
  3. В процессе установки выберите опцию интеграции с командной строкой или PowerShell.

В терминале выполните команду:

sudo apt update && \
sudo apt install git

Примечание

Если вы используете дистрибутив, отличный от Ubuntu или Debian, установите git с помощью команд вашего пакетного менеджера.

  1. Установите пакетный менеджер Homebrew с помощью команды в терминале:

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    
  2. Установите git:

    brew update && \
    brew install git
    

Работа с репозиторием

Инициализация репозитория (git init)

Инициализация нужна для того, чтобы git проиндексировал файлы в директории и начал отслеживать изменения в ней.

  1. Создайте директорию для вашего проекта с помощью команды в терминале:

    mkdir <путь_к_директории>
    

    Если нужно инициализировать репозиторий в уже существующей директории, пропустите этот шаг.

  2. Перейдите в директорию с проектом:

    cd <путь_к_директории>
    
  3. Чтобы инициализировать репозиторий, выполните команду:

    git init
    

В текущей директории будут созданы файлы для работы с git, и она начнет восприниматься git в качестве репозитория.

Совет

Также вы можете создать репозиторий в SourceCraft и склонировать себе уже инициализированный репозиторий.

Клонирование существующего репозитория (git clone)

Чтобы клонировать существующий репозиторий, выполните команду:

git clone <ссылка_на_репозиторий>

Будет создана локальная копия удаленного репозитория на вашем компьютере.

Важно

Чтобы склонировать приватный репозиторий, аутентифицируйтесь с помощью персонального токена (PAT) или SSH-ключа.

Обновление локальной копии репозитория (git fetch и git pull)

Чтобы получить изменения из удаленного репозитория, выполните команду:

git fetch

Изменения скачаются во внутреннее хранилище git и будут доступны в удаленных ветках, например origin/main, но ваши локальные ветки не изменятся.

Чтобы объединить эти изменения с вашей текущей веткой, выполните команду:

git pull

Работа с ветками

Ветки репозитория — это отдельные копии проекта, которые позволяют работать над изменениями независимо от основной версии. Ветки могут быть как локальными, так и удаленными. Локальная ветка находится на вашем компьютере, а удаленная — на сервере и обычно используется для совместной работы.

Основная или главная ветка (main)

В большинстве проектов основная ветка называется main или master. В ней обычно хранится стабильная версия проекта — то, что готово к релизу или использованию. Не рекомендуется сразу вносить изменения в основную ветку — лучше создавать отдельные ветки для разработки новых функций или исправлений.

Чтобы посмотреть все локальные ветки, выполните команду:

git branch

Рабочая ветка будет отмечена символом *.

Совет

Также вы можете посмотреть все ветки репозитория в интерфейсе SourceCraft. Для этого на странице репозитория в разделе Код перейдите в секцию Ветки.

Отколоть ветку (git branch)

Отколоть ветку означает создать независимую копию текущей ветки репозитория, чтобы работать над изменениями отдельно от основной линии. Перед началом работы всегда выполняйте git pull, чтобы быть уверенным в актуальности ветки и данных в ней.

Чтобы отколоть новую ветку, выполните команду:

git branch <имя_ветки>

Чтобы отколоть ветку и сразу перейти на нее, выполните команду:

git checkout -b <имя_ветки>

Переключение между ветками (git checkout)

Чтобы перейти на другую существующую ветку, выполните команду:

git checkout <имя_ветки>

Объединение веток (git merge)

Объединение (merge) веток используется, чтобы соединить изменения из одной ветки с другой. Например, чтобы внести подготовленные исправления или обновления в основную ветку. Процесс происходит путем слияния содержимого выбранных веток в одну, объединяя все внесенные изменения.

Когда работа в отколотой ветке завершена, чтобы объединить ее с основной, поочередно выполните команды:

  1. Переключитесь на целевую ветку, например main:

    git checkout main
    
  2. Выполните слияние:

    git merge <имя_ветки_с_изменениями>
    

Если в процессе объединения возникнут конфликты, их нужно решить вручную.

После успешного слияния ветка, которая «вливалась» в основную, обычно не удаляется автоматически — ее нужно удалить вручную.

Совет

Для безопасного объединения веток с возможностью рецензирования изменений и автоматическими проверками в SourceCraft предусмотрен механизм предложений изменений (pull requests). Подробнее см. Предложить изменения в репозитории SourceCraft.

Удаление ветки (git branch -d)

Если ветка больше не нужна, ее можно удалить командой:

git branch -d <имя_ветки>

Если у вас есть невнесенные изменения в ветке, которые могут быть потеряны при удалении, команда выдаст ошибку. Посмотреть текущие невнесенные изменения можно с помощью команды:

git status

В ответном сообщении будут выведены файлы с изменениями, которые не были добавлены в коммит.

Чтобы принудительно удалить ветку, выполните команду:

git branch -D <имя_ветки>

Важно

При принудительном удалении все изменения, которые не были добавлены в коммит, будут потеряны. Убедитесь, что все важное сохранено.

Дополнительные действия с ветками

Чтобы отправить ветку на сервер, выполните команду:

git push origin <имя_ветки>

Команда отправит вашу локальную ветку в удаленный репозиторий, делая ее доступной для других участников проекта.

Чтобы просмотреть все ветки в репозитории, выполните команду:

git branch -a

Результатом будет список всех веток, доступных в вашем репозитории, включая те, что находятся на сервере.

Чтобы восстановить ранее удаленную ветку, выполните команду:

git checkout -b <имя_новой_ветки> <имя_удаленной_ветки>

Из удаленной ветки будет создана новая ветка. Это позволит восстановить утерянные или ошибочно стертые данные.

Коммиты

После сохранения изменений в файлах репозитория необходимо подготовить их к коммиту.

Коммиты — это «снимки» состояния ваших файлов в определенный момент времени. Они позволяют отслеживать историю изменений и возвращаться к нужным версиям.

Совет

Регулярно делайте коммиты даже после небольших изменений.

Добавление изменения в коммит (git add)

  1. Посмотрите изменения, которые еще не были внесены в коммит:

    git status
    
  2. Добавьте изменения в коммит одним из следующих способов:

    • Добавить изменения в конкретном файле:

      git add <имя_файла>
      
    • Добавить все измененные файлы в текущей директории:

      git add .
      
    • Добавить все измененные в репозитории файлы:

      git add --all
      

Создание коммита с описанием (git commit)

Чтобы создать коммит с описанием внесенных изменений, выполните команду:

git commit -m "Описание изменений"

Совет

Используйте короткие сообщения при коммите — так легче ориентироваться.

Изменение последнего коммита (git commit --amend -m)

Чтобы изменить последний коммит, например, исправить описание изменений, выполните команду:

git commit --amend -m "Обновленное описание"

Объединение коммитов (git rebase)

Объединение нескольких последних коммитов в один помогает сделать их историю более лаконичной или сгруппировать связанные изменения в единый логический блок.

Для этого удобно использовать интерактивное переписывание истории (git rebase -i), которое позволяет выбрать коммиты для объединения или изменить их порядок и содержание.

Чтобы запустить переписывание истории, выполните команду:

git rebase -i HEAD~N

Где N — число последних коммитов, которые нужно обработать.

В результате откроется редактор со списком выбранных коммитов. Чтобы объединить последние коммиты с предшествующими, нужно заменить слово pick на squash (или s).

Примечание

При переписывании истории могут возникнуть конфликты, которые потребуется решить вручную, а затем продолжить процесс командой:

git rebase --continue

Пример объединения коммитов

Результат команды git rebase -i HEAD~3 в редакторе:

pick e3a1b35 Исправление опечатки
pick 7ac9a67 Добавление новой функции
pick 4f5d6e2 Обновление документации

Чтобы объединить последние три коммита в один, замените слова pick на squash (или s) у второго и третьего коммита:

pick e3a1b35 Исправление опечатки
squash 7ac9a67 Добавление новой функции
squash 4f5d6e2 Обновление документации

После этого сохраните файл и закройте редактор. Выбранные коммиты объединятся.

Удаление коммитов (git reset)

Чтобы удалить последний коммит, выполните команду:

git reset --hard HEAD~1

Чтобы удалить несколько последних коммитов, выполните команду:

git reset --hard HEAD~N

Где N — число последних коммитов, которые нужно удалить.

Все изменения, связанные с выбранными коммитами, будут полностью удалены из текущей ветки.

Важно

Будьте осторожны при использовании команды git reset. Вы можете потерять важные изменения, которые не были сохранены в других ветках или не зафиксированы в другом месте.

Восстановление коммита (git cherry-pick)

Для восстановления ранее удаленного коммита понадобится его хеш (SHA).

Хеш коммита — уникальный короткий код, который создается автоматически для каждого сохраненного изменения в проекте.

Примечание

Коммит, который нужно восстановить, должен находиться в истории репозитория. Если коммит был полностью удален, например при git push --force, его восстановление невозможно.

  1. Чтобы найти нужный коммит, посмотрите журнал ссылок, выполнив команду:

    git reflog
    

    Пример результата команды:

    abc1234 (HEAD -> master) HEAD@{0}: reset --hard HEAD~1
    def5678 (branch: master) HEAD@{1}: commit: Добавлено пояснение
    ghi9012 HEAD@{2}: commit: Исправлена ошибка
    

    Где:

    • def5678 — хеш коммита;
    • commit: Добавлено пояснение — описание коммита.
  2. В выводе команды найдите нужный коммит по его описанию.

  3. Скопируйте его хеш. Обычно это первые 7–10 символов в начале строки.

  4. Выберите один из вариантов восстановления:

    Чтобы создать новую ветку на основе коммита и сразу переключиться на нее, выполните команду:

    git checkout -b <имя_новой_ветки> <хеш_коммита>
    

    Пример:

    git checkout -b restored-branch def5678
    

    В процессе восстановления могут возникнуть конфликты, которые потребуется решить вручную.

    Коммит будет добавлен в текущую рабочую ветку как последний. Изменения, сохраненные в нем, будут включены в ее историю, не затрагивая другие текущие изменения. В процессе добавления могут возникнуть конфликты, которые потребуется решить вручную перед завершением операции.

    Чтобы восстановить коммит в рабочей ветке, выполните команду:

    git cherry-pick <хеш_коммита>
    

    Удаленный коммит будет возвращен на свое место в истории. Ветка перейдет к состоянию этого коммита, игнорируя все изменения, сделанные позже. Будьте осторожны, так как все текущие несохраненные изменения будут удалены.

    Чтобы сделать этот коммит текущим состоянием ветки, выполните команду:

    git reset --hard <хеш_коммита>
    

Просмотр коммита (git show)

Просмотр коммита происходит вне какой-либо ветки. Чтобы посмотреть содержимое коммита прямо в терминале, выполните команду:

git show <хеш_коммита>

Чтобы выйти из режима просмотра, нажмите q на клавиатуре.

Отправка изменений

Push — это команда, которая отправляет ваши изменения с компьютера на сервер, чтобы другие участники проекта могли их увидеть и использовать.

Отправить изменения (git push)

Чтобы отправить текущие изменения в удаленный репозиторий, выполните команду:

git push origin <имя_ветки_в_удаленном_репозитории>

Отменить отправку изменений (git reset и git push)

Чтобы отменить ваши последние изменения на сервере и вернуть ветку к предыдущему состоянию, выполните следующие шаги:

  1. Верните локальную ветку к состоянию перед последним коммитом. Для этого выполните команду, которая удалит последний коммит и восстановит файлы до предыдущего состояния:

    git reset --hard HEAD^
    
  2. Обновите удаленную ветку, чтобы она соответствовала текущему состоянию локальной. Для этого выполните команду принудительной отправки изменений:

    git push --force
    

    Будьте осторожны, так как использование параметра --force может привести к потере данных у других участников проекта, если они уже синхронизировались с удаленным репозиторием. Изменения, внесенные ими после синхронизации, также будут стерты. Перед выполнением рекомендуется предупредить команду или убедиться, что никто не потеряет важную информацию.

    Примечание

    Если ваши изменения еще не внесены в коммит — сначала сделайте commit, затем push.

Решение конфликтов

Конфликт — это ситуация, когда в репозитории есть противоречивые изменения, сделанные в одних и тех же местах.

Причины возникновения конфликтов:

  • Одновременная работа нескольких людей над одними файлами.
  • Обновление локальной копии с сервера (git pull), когда изменения в удаленном репозитории противоречат вашим локальным правкам.
  • Слияние веток (git merge), если в них были сделаны разные изменения в одних и тех же участках кода.
  • Попытка отправки изменений (git push) в удаленный репозиторий, если в нем уже есть коммиты, противоречащие вашим локальным правкам.

Git сообщит о конфликте и покажет файлы с метками конфликтов.

Что делать при конфликте:

  1. Откройте файлы с конфликтами через любой редактор.

  2. Удалите неактуальный текст и лишние символы (<<<<<<<, ======= и >>>>>>>).

  3. Сохраните изменения.

  4. Добавьте изменения в ветку:

    git add <имя_файла>
    
  5. Сделайте коммит изменений:

    git commit -m "Описание коммита"
    
  6. Опубликуйте изменения:

    git push
    

Дополнительные команды

Команда Назначение команды
git log Просмотр истории.
git blame <имя_файла> Просмотр внесенных изменений в выбранном файле: показывает, какие пользователи и какую часть файла изменили.
git blame -L <начальная_строка>,
<конечная_строка> <имя_файла>
Просмотр изменений в определенном диапазоне строк в выбранном файле.
git branch Просмотр всех веток репозитория. Активная ветка будет отмечена *.
git checkout -- <файл> Отмена изменений в файле. Возвращает файл к последнему зафиксированному состоянию.
git diff Просмотр отличий между вашими локальными неотправленными изменениями и последней версией ветки.
git diff <имя_ветки> Просмотр отличий между вашими локальными неотправленными изменениями и последней версией другой ветки.
git gc Оптимизирует локальный репозиторий, освобождая место на диске и удаляя забытые или потерянные данные, которые не используются текущими ветками, но все еще хранятся в репозитории.
git tag Создание тегов для отметки важных точек в развитии проекта, например релизов.
git remote add <имя_репозитория>
<ссылка_на_репозиторий>
Связывает ваш локальный репозиторий с удаленным репозиторием, чтобы вы могли отправлять туда свои изменения или получать обновления.
git remote -v Просмотр связанных с проектом удаленных репозиториев.
git stash Временное сохранение изменений.
git stash pop Восстановление временно сохраненных изменений.
git reflog Отображает список изменений в журналах git. По умолчанию отображается список изменений в HEAD.

См. также