SprintCode.pro

Подготовка к алгоритмическим задачам

Super

25 основных команд Git, которые должен знать каждый разработчик

15 мин чтения
git
контроль версий
инструменты разработчика
командная строка
разработка
GitHub

Почему Git незаменим в современной разработке?

Git стал стандартом де-факто для контроля версий в индустрии разработки программного обеспечения. Эффективное использование Git позволяет:

  • 🔄 Отслеживать изменения в коде с детальной историей
  • 👥 Организовывать параллельную работу в команде без конфликтов
  • 🛡️ Создавать резервные копии и безопасно экспериментировать
  • 🚀 Автоматизировать процессы разработки и деплоя
  • 📈 Ускорять разработку благодаря повторному использованию кода

В этой статье мы рассмотрим 25 наиболее полезных команд Git, которые должен знать каждый разработчик — от базовых операций до продвинутых техник.

Начало работы с Git

1. git init

Инициализирует новый Git-репозиторий в текущей директории.

git init

Эта команда создает скрытую папку .git, которая содержит всю необходимую информацию и настройки для управления версиями проекта.

Полезные опции:

  • git init --bare - создает репозиторий без рабочей директории, обычно используется на серверах
  • git init --template=<directory> - инициализирует с указанным шаблоном

2. git clone

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

git clone https://github.com/username/repository.git

Помимо простого клонирования, команда позволяет:

# Клонировать определенную ветку git clone -b branch-name https://github.com/username/repository.git # Клонировать с ограниченной глубиной истории для экономии времени и места git clone --depth=1 https://github.com/username/repository.git # Клонировать с определенным именем директории git clone https://github.com/username/repository.git custom-folder-name

3. git config

Настраивает параметры Git на уровне системы, пользователя или репозитория.

# Настройка имени и email пользователя git config --global user.name "Your Name" git config --global user.email "your.email@example.com" # Настройка редактора по умолчанию git config --global core.editor "code --wait" # Настройка инструмента для разрешения конфликтов git config --global merge.tool vscode # Просмотр всех настроек git config --list

Основные операции

4. git add

Добавляет файлы в индекс (staging area) для последующего коммита.

# Добавить конкретный файл git add filename.txt # Добавить все файлы git add . # Добавить все файлы с определенным расширением git add *.js # Интерактивное добавление файлов git add -i # Добавить все изменения в отслеживаемых файлах git add -u

5. git commit

Создает коммит с изменениями, добавленными в индекс.

undefined
Пройди собеседование в топ-компанию
Платформа для подготовки

Решай алгоритмические задачи как профи

✓ Популярные алгоритмы✓ Разбор решений✓ AI помощь
Начать сейчас
Программист за работой

Создать коммит с сообщением

git commit -m "Добавлена новая функциональность"

Добавить все измененные отслеживаемые файлы и создать коммит

git commit -am "Исправлена ошибка в логике авторизации"

Изменить последний коммит

git commit --amend -m "Новое сообщение для последнего коммита"

Создать пустой коммит (полезно для триггеров CI/CD)

git commit --allow-empty -m "Пустой коммит для запуска сборки"


### 6. git status

Показывает состояние рабочей директории и индекса.

```bash
git status

# Сокращенный вывод
git status -s

# Показать игнорируемые файлы
git status --ignored

Эта команда отображает:

  • Текущую ветку
  • Измененные файлы, которые не добавлены в индекс
  • Файлы в индексе, готовые к коммиту
  • Файлы, которые не отслеживаются Git

7. git diff

Показывает разницу между различными состояниями.

# Показать изменения в рабочей директории git diff # Показать изменения в индексе git diff --staged # Сравнить две ветки git diff branch1 branch2 # Сравнить конкретные файлы git diff -- path/to/file # Сравнить с определенным коммитом git diff HEAD~3

8. git log

Отображает историю коммитов.

# Базовый просмотр истории git log # Компактный вид с графом веток git log --oneline --graph --all # Показать изменения в каждом коммите git log -p # Фильтрация по автору git log --author="User Name" # Поиск коммитов по содержимому git log -S "функция поиска" # Фильтрация по дате git log --since="2023-01-01" --until="2023-02-01" # Красивый форматированный вывод git log --pretty=format:"%h - %an, %ar : %s"

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

9. git branch

Управляет ветками в репозитории.

# Показать список локальных веток git branch # Показать все ветки (включая удаленные) git branch -a # Создать новую ветку git branch new-feature # Удалить ветку (если изменения слиты) git branch -d branch-name # Принудительно удалить ветку git branch -D branch-name # Переименовать ветку git branch -m old-name new-name # Показать ветки, слитые с master git branch --merged master

10. git checkout

Переключается между ветками или восстанавливает файлы из коммитов.

# Переключиться на другую ветку git checkout branch-name # Создать новую ветку и сразу переключиться на нее git checkout -b new-feature # Отменить изменения в файле git checkout -- filename.txt # Создать ветку из определенного коммита git checkout -b new-branch commit-hash # Временно переключиться на другой коммит git checkout commit-hash

11. git switch

Современная альтернатива git checkout для переключения между ветками (доступна с Git 2.23).

# Переключиться на другую ветку git switch branch-name # Создать новую ветку и переключиться на нее git switch -c new-feature # Вернуться к предыдущей ветке git switch -

12. git merge

Объединяет изменения из другой ветки в текущую.

# Слить ветку feature в текущую ветку git merge feature # Слить без автоматического создания коммита git merge --no-commit feature # Продолжить слияние после разрешения конфликтов git merge --continue # Прервать процесс слияния git merge --abort # Стратегия слияния fast-forward git merge --ff-only feature

13. git rebase

Переносит коммиты из текущей ветки на вершину другой ветки.

# Перебазировать текущую ветку на master git rebase master # Интерактивное перебазирование последних n коммитов git rebase -i HEAD~3 # Продолжить перебазирование после разрешения конфликтов git rebase --continue # Пропустить текущий конфликтующий коммит git rebase --skip # Отменить перебазирование git rebase --abort

Интерактивное перебазирование позволяет:

  • Объединять коммиты (squash)
  • Редактировать содержимое коммитов
  • Переупорядочивать коммиты
  • Удалять ненужные коммиты
  • Разделять коммиты

Работа с удаленными репозиториями

14. git remote

Управляет удаленными репозиториями.

# Показать список удаленных репозиториев git remote -v # Добавить удаленный репозиторий git remote add origin https://github.com/username/repository.git # Удалить удаленный репозиторий git remote remove origin # Переименовать удаленный репозиторий git remote rename origin upstream # Обновить URL удаленного репозитория git remote set-url origin https://github.com/new-username/repository.git

15. git fetch

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

# Загрузить изменения из всех удаленных репозиториев git fetch --all # Загрузить изменения из конкретного репозитория git fetch origin # Загрузить определенную ветку git fetch origin branch-name # Загрузить все ветки git fetch --all # Очистить удаленные ветки, которые были удалены на сервере git fetch --prune

16. git pull

Загружает изменения из удаленного репозитория и сливает их с текущей веткой.

# Загрузить и слить изменения git pull # Загрузить и перебазировать локальные изменения git pull --rebase # Загрузить изменения без автоматического слияния git pull --no-commit # Загрузить со стратегией fast-forward git pull --ff-only

17. git push

Отправляет локальные изменения в удаленный репозиторий.

# Отправить изменения в удаленный репозиторий git push origin branch-name # Отправить все ветки git push --all origin # Отправить теги git push --tags # Принудительная отправка (осторожно!) git push --force # Безопасная принудительная отправка git push --force-with-lease # Установить связь между локальной и удаленной веткой git push -u origin branch-name

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

18. git stash

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

# Сохранить все изменения git stash # Сохранить с комментарием git stash save "Работа над авторизацией" # Применить последние сохраненные изменения git stash apply # Посмотреть список сохранений git stash list # Применить конкретное сохранение git stash apply stash@{2} # Удалить последнее сохранение после применения git stash pop # Удалить все сохранения git stash clear # Создать ветку из сохранения git stash branch new-branch stash@{0}

19. git tag

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

# Создать легковесный тег git tag v1.0.0 # Создать аннотированный тег с сообщением git tag -a v1.0.0 -m "Релиз версии 1.0.0" # Показать список тегов git tag # Показать информацию о теге git show v1.0.0 # Удалить тег git tag -d v1.0.0 # Отправить теги в удаленный репозиторий git push origin --tags # Удалить тег из удаленного репозитория git push origin --delete v1.0.0

20. git reset

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

# Сбросить индекс (оставить изменения в рабочей директории) git reset # Сбросить индекс для конкретного файла git reset -- filename.txt # Сбросить HEAD на предыдущий коммит (soft - сохраняет изменения в индексе) git reset --soft HEAD~1 # Сбросить HEAD и индекс (mixed - сохраняет изменения в рабочей директории) git reset --mixed HEAD~1 # Сбросить HEAD, индекс и рабочую директорию (hard - удаляет все изменения) git reset --hard HEAD~1 # Сбросить на конкретный коммит git reset --hard commit-hash

21. git revert

Создает новый коммит, отменяющий изменения других коммитов.

# Отменить последний коммит git revert HEAD # Отменить конкретный коммит git revert commit-hash # Отменить несколько коммитов git revert HEAD~3..HEAD # Отменить без автоматического создания коммита git revert --no-commit HEAD~3..HEAD

22. git cherry-pick

Применяет изменения из определенных коммитов к текущей ветке.

# Применить один коммит git cherry-pick commit-hash # Применить несколько коммитов git cherry-pick commit-hash1 commit-hash2 # Применить диапазон коммитов git cherry-pick commit-hash1^..commit-hash2 # Применить без создания коммита git cherry-pick -n commit-hash

23. git clean

Удаляет неотслеживаемые файлы из рабочей директории.

# Показать, какие файлы будут удалены, но не удалять git clean -n # Удалить неотслеживаемые файлы git clean -f # Удалить неотслеживаемые файлы и директории git clean -fd # Удалить игнорируемые файлы git clean -fX # Удалить все неотслеживаемые и игнорируемые файлы git clean -fdx

24. git bisect

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

# Начать бинарный поиск git bisect start # Отметить текущий коммит как "плохой" git bisect bad # Отметить известный "хороший" коммит git bisect good commit-hash # Отметить текущий коммит как "хороший" git bisect good # Отметить текущий коммит как "плохой" git bisect bad # Завершить бинарный поиск git bisect reset # Автоматизировать процесс с тестом git bisect run test-script.sh

25. git worktree

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

# Создать новое рабочее дерево для ветки git worktree add ../path-to-new-directory branch-name # Создать новое рабочее дерево с новой веткой git worktree add -b new-branch ../path-to-directory main # Показать список рабочих деревьев git worktree list # Удалить рабочее дерево git worktree remove path-to-directory # Очистить информацию о рабочих деревьях git worktree prune

Практические сценарии использования Git

Сценарий 1: Работа над новой функциональностью

# Создание и переключение на новую ветку git checkout -b feature/user-authentication # Разработка и коммит изменений git add . git commit -m "Добавлена форма авторизации" # Дополнительные изменения git add . git commit -m "Добавлена валидация форм" # Подтягиваем изменения из основной ветки git fetch origin git rebase origin/main # Отправка изменений в удаленный репозиторий git push -u origin feature/user-authentication # После review и одобрения PR git checkout main git pull

Сценарий 2: Исправление ошибки в продакшене

# Создание хотфикс-ветки от тега релиза git checkout -b hotfix/critical-bug v1.0.0 # Исправление ошибки git add . git commit -m "Исправлен критический баг #123" # Проверка изменений git diff origin/main # Отправка исправления git push -u origin hotfix/critical-bug # Быстрое применение хотфикса в main после тестирования git checkout main git merge --no-ff hotfix/critical-bug git push # Создание тега для нового релиза git tag -a v1.0.1 -m "Хотфикс критического бага #123" git push --tags

Сценарий 3: Очистка истории перед Pull Request

# Интерактивное перебазирование для объединения коммитов git checkout feature-branch git rebase -i origin/main # В интерактивном режиме заменить 'pick' на 'squash' для коммитов, которые нужно объединить # После успешного перебазирования git push --force-with-lease

Сценарий 4: Работа на нескольких задачах одновременно

# Сохранение текущих изменений git stash save "Работа над задачей А" # Переключение на другую задачу git checkout -b feature/task-B # Работа над задачей B... git add . git commit -m "Завершена задача B" git push -u origin feature/task-B # Возвращение к первой задаче git checkout feature/task-A git stash pop # Продолжение работы...

Советы по эффективному использованию Git

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

    feat: добавлена функция авторизации через Google
    fix: исправлена ошибка в расчете налога
    docs: обновлена документация API
    refactor: переработан модуль пользователей
    
  2. Настройте глобальный .gitignore для исключения временных файлов, кэша и конфигураций IDE.

  3. Используйте псевдонимы (aliases) для часто используемых команд:

    git config --global alias.co checkout git config --global alias.br branch git config --global alias.st status git config --global alias.lg "log --oneline --graph --all"
  4. Настройте инструменты для разрешения конфликтов:

    git config --global merge.tool vscode
  5. Используйте хуки Git для автоматизации проверок кода, запуска тестов и форматирования.

  6. Периодически выполняйте обслуживание репозитория:

    git gc git prune
  7. Используйте подмодули или подрепозитории для управления зависимостями.

Заключение

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

Важно не только знать команды, но и понимать основные концепции Git: коммиты, ветки, индекс, рабочая директория, HEAD и удаленные репозитории. С этим пониманием вы сможете использовать Git более осознанно и решать сложные ситуации, когда они возникают.

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