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

25 основных команд Git, которые должен знать каждый разработчик
Почему 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
Решай алгоритмические задачи как профи

Создать коммит с сообщением
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
-
Используйте осмысленные сообщения коммитов следуя стандартам, например:
feat: добавлена функция авторизации через Google fix: исправлена ошибка в расчете налога docs: обновлена документация API refactor: переработан модуль пользователей
-
Настройте глобальный .gitignore для исключения временных файлов, кэша и конфигураций IDE.
-
Используйте псевдонимы (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"
-
Настройте инструменты для разрешения конфликтов:
git config --global merge.tool vscode
-
Используйте хуки Git для автоматизации проверок кода, запуска тестов и форматирования.
-
Периодически выполняйте обслуживание репозитория:
git gc git prune
-
Используйте подмодули или подрепозитории для управления зависимостями.
Заключение
Освоение этих 25 команд Git значительно повысит вашу эффективность как разработчика и поможет избежать многих проблем при работе с контролем версий. Git — мощный инструмент, который раскрывает свой потенциал по мере освоения более продвинутых техник.
Важно не только знать команды, но и понимать основные концепции Git: коммиты, ветки, индекс, рабочая директория, HEAD и удаленные репозитории. С этим пониманием вы сможете использовать Git более осознанно и решать сложные ситуации, когда они возникают.
Практикуйте эти команды регулярно, и вскоре они станут неотъемлемой частью вашего рабочего процесса, позволяя сосредоточиться на творческих аспектах разработки.