Git komand
Git — система контроля версий. Она позволяет сохранять историю изменений, работать с ветками и обмениваться кодом через удалённый репозиторий, например GitLab или GitHub.
На этой странице собраны команды из памятки Git_useful_commands.pdf с уточнёнными описаниями и практическими примерами.
Как устроена работа с Git
| Понятие | Что означает |
|---|---|
| Рабочая папка | Файлы проекта, которые вы редактируете. |
| Индекс (staging area) | Подготовленные изменения для следующего коммита. В индекс попадает состояние файла на момент выполнения git add.
|
| Коммит | Сохранённая версия подготовленных изменений в локальной истории Git. |
| Ветка | Отдельная линия разработки, например main или feature/new-command.
|
| Удалённый репозиторий | Репозиторий на другом компьютере или сервере. Обычно его короткое имя — origin.
|
Обычная последовательность: изменить файлы → проверить изменения → git add → git commit → git push.
Важно: коммит сохраняет изменения локально. Чтобы отправить коммиты на сервер, нужна отдельная команда git push.
Проверка и создание репозитория
git --version — версия Git
Показывает установленную версию Git.
git --version
git init — создать локальный репозиторий
Инициализирует репозиторий в текущей папке. Создаёт служебный каталог .git, в котором Git хранит историю и настройки. Файлы проекта автоматически в коммит не попадают.
cd my-project
git init
Дополнительно: git clone — скачать существующий проект
Создаёт локальную копию удалённого репозитория и обычно настраивает для него имя origin. Замените адрес на URL своего проекта.
git clone https://gitlab.example.com/team/my-project.git
cd my-project
После git clone выполнять git init не требуется.
Проверка изменений
git status — состояние проекта
Показывает текущую ветку, подготовленные изменения, изменения вне индекса и новые неотслеживаемые файлы. Игнорируемые файлы по умолчанию не выводятся.
git status
Краткий вариант:
git status -sb
git diff — посмотреть изменения
Показывает разницу между рабочей папкой и индексом: изменения в отслеживаемых файлах, которые ещё не подготовлены к коммиту.
git diff
Посмотреть изменения, уже подготовленные к следующему коммиту:
git diff --staged
Посмотреть изменения конкретного файла вне индекса:
git diff -- README.md
Обратите внимание: обычный git diff не показывает содержимое новых неотслеживаемых файлов. Если изменения уже добавлены через git add, смотрите их через git diff --staged.
Подготовка и сохранение изменений
git add — подготовить изменения
Добавляет в индекс новые файлы, изменения и удаления в указанной области.
Все изменения в текущей папке и её подпапках, кроме игнорируемых неотслеживаемых файлов:
git add .
Только выбранный файл:
git add README.md
Несколько файлов:
git add README.md bot/main.py
Если после git add снова отредактировать файл, новые правки нужно добавить повторно. Перед массовым добавлением проверьте git status, чтобы в коммит не попали пароли, токены или ненужные файлы.
git commit -m — сохранить коммит
Создаёт локальный коммит из изменений в индексе. Параметр -m задаёт сообщение с описанием изменений.
git commit -m "Добавлена команда просмотра статистики"
Пишите, что именно изменилось. Например: Исправлено переподключение к Telegram вместо update.
Работа с удалённым репозиторием
git remote — список подключений
Показывает короткие имена настроенных удалённых репозиториев, например origin и upstream.
git remote
git remote -v — адреса репозиториев
Показывает имена и URL для получения изменений (fetch) и отправки (push).
git remote -v
Для нового проекта, созданного через git init, подключение можно добавить отдельно. Репозиторий на сервере должен уже существовать:
git remote add origin https://gitlab.example.com/team/my-project.git
git push — отправить коммиты на сервер
Отправляет локальные коммиты и обновляет соответствующие ветки на сервере согласно параметрам команды и настройкам Git. Незакоммиченные правки не отправляются.
Если для текущей ветки уже настроена связь с удалённой веткой:
git push
При первой отправке новой ветки:
git push -u origin feature/new-command
Здесь -u настраивает отслеживаемую удалённую ветку для последующих команд. Замените feature/new-command на имя своей ветки.
git pull — получить и включить изменения
Получает изменения с сервера и включает их в текущую ветку. Способ включения зависит от параметров и настроек: слияние, rebase или только fast-forward.
git pull
Для обычного обновления без автоматического создания коммита слияния:
git pull --ff-only
Если локальная и удалённая истории разошлись, --ff-only остановит обновление. Перед обновлением проверьте git status и сохраните текущую работу коммитом или через git stash.
Просмотр истории
git log — история коммитов
Показывает коммиты, доступные из текущей точки истории: идентификатор, автора, дату и сообщение. Это не только ваши коммиты и не обязательно история всех веток.
git log
Последние десять коммитов в кратком виде:
git log --oneline -10
Граф истории по всем локально известным веткам:
git log --oneline --graph --decorate --all
Если вывод открылся в просмотрщике, для выхода обычно используется клавиша q.
Работа с ветками
git branch — локальные ветки
Показывает локальные ветки. Текущая ветка отмечена символом *.
git branch
git branch -a — локальные и удалённые ветки
Показывает локальные ветки и локально сохранённые ссылки на удалённые ветки. Команда сама не обращается к серверу.
git branch -a
Обновить сведения с origin и убрать устаревшие ссылки на удалённые ветки:
git fetch origin --prune
git branch -a
git branch NAME — создать ветку
Создаёт новую ветку от текущего коммита, но не переключается на неё.
git branch feature/new-command
git checkout NAME — переключиться на ветку
Переключает текущую ветку и обновляет файлы рабочей папки.
git checkout feature/new-command
Альтернатива для переключения веток:
git switch feature/new-command
Создать ветку и сразу переключиться на неё одной командой:
git switch -c feature/new-command
Используйте либо создание через git branch с последующим переключением, либо git switch -c. Повторно создавать уже существующую ветку не нужно.
git branch -D NAME — принудительно удалить ветку
Удаляет локальную ветку без проверки того, что её коммиты уже включены в другую историю.
Для обычного удаления сначала используйте вариант с проверкой:
git branch -d feature/old-task
Принудительный вариант из исходной памятки:
git branch -D feature/old-task
Важно: -D может удалить последнюю ветку, ссылающуюся на нужные коммиты. Используйте его только если содержимое ветки больше не требуется или сохранено в другом месте. Нельзя удалить ветку, которая сейчас используется в рабочем дереве; сначала переключитесь на другую. На сервере ветка этой командой не удаляется.
Временное сохранение работы
git stash — отложить незакоммиченные изменения
Временно сохраняет изменения отслеживаемых файлов, включая индекс, и возвращает эти файлы к состоянию текущего коммита.
git stash
Сохранить также новые неотслеживаемые файлы и добавить описание:
git stash push -u -m "Незавершённая работа над статистикой"
Посмотреть список сохранений:
git stash list
Вернуть последнее сохранение:
git stash pop
После успешного применения pop удаляет запись из stash. Если возник конфликт, запись сохраняется. Вариант git stash apply применяет изменения, оставляя запись в списке.
Примечание: обычный git stash не включает новые неотслеживаемые файлы; для них нужен -u. Игнорируемые файлы с -u также не сохраняются. Stash хранится локально и не отправляется обычным git push.
Пример повседневной работы
Пример для существующего репозитория и ветки с настроенным отслеживанием. Выполняйте команды последовательно, проверяя результат каждого шага. При ошибке или конфликте сначала разберитесь с ним.
1. Перейти в проект и проверить состояние:
cd my-project
git status
2. При чистой рабочей папке получить обновления:
git pull --ff-only
3. Изменить файлы, затем проверить правки:
git status
git diff
4. Подготовить нужные файлы и проверить будущий коммит:
git add README.md
git diff --staged
Замените README.md на нужные файлы. Если нужны все изменения, можно выполнить git add . из корня проекта.
5. Сохранить и отправить:
git commit -m "Обновлена документация проекта"
git push
git status
Частые вопросы
- Почему после git add команда git diff ничего не показывает?
- Изменения уже находятся в индексе. Выполните
git diff --staged.
- Почему изменения не появились в GitLab или GitHub после коммита?
git commitсохраняет изменения локально. Для отправки нужен успешныйgit pushв нужный удалённый репозиторий и ветку.
- Почему новая ветка не стала текущей после git branch?
- Эта команда только создаёт ветку. Переключитесь через
git switchилиgit checkout.
- Почему push сообщает, что нет upstream-ветки?
- Для новой ветки настройте отслеживание командой
git push -u origin ИМЯ_ВЕТКИ, заменив имя на фактическое.
- Почему push отклонён с сообщением non-fast-forward?
- На сервере есть история, которой нет в вашей отправляемой ветке. Получите изменения через
git fetch, изучите расхождение и согласуйте истории перед повторной отправкой.
Источник
Подготовлено на основе памятки Git_useful_commands.pdf. Описания переведены и уточнены; дополнительные варианты команд, примеры и ответы на частые вопросы добавлены для практического использования.