DevOps & CI/CD

Команды Git

Разбор ключевых команд Git: pull, fetch, push, stash, revert, checkout — что делают, чем отличаются и когда применяются.

Что такое команды Git

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

git fetch и git pull

Обе команды забирают изменения с сервера, но по-разному.

git fetch — скачивает новые коммиты в локальную копию удалённых веток (origin/main) и на этом останавливается. Ваша рабочая ветка не меняется, файлы на диске те же. Это безопасная разведка: посмотреть, что нового, ничего не сломав.

git pull — это fetch плюс немедленное слияние скачанного в вашу текущую ветку. То есть pull = fetch + merge (или fetch + rebase при соответствующей настройке). Именно pull способен породить конфликт прямо сейчас.

git fetch origin              # скачать, не трогая рабочую ветку
git log HEAD..origin/main     # что прилетело нового
git diff origin/main          # чем отличается от моего состояния
git merge origin/main         # теперь слить осознанно

git pull                      # то же самое одной командой
git pull --rebase             # без merge-коммита, история линейная

Практическое правило: fetch + просмотр — когда важно понимать, что вливается; pull --rebase — в повседневной работе над веткой.

git push

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

git push origin main
git push -u origin feature/auth   # первый push ветки, запомнить связь
git push --force-with-lease       # после rebase: безопаснее, чем --force

--force перезаписывает историю на сервере и способен стереть чужие коммиты. --force-with-lease откажется от push, если на сервере появилось что-то, чего вы не видели, — используйте его.

git stash

Убирает незакоммиченные изменения «в карман» и возвращает чистый рабочий каталог. Классический сценарий: вы посреди работы, а нужно срочно переключиться на хотфикс.

git stash                     # спрятать правки
git stash -u                  # вместе с новыми (untracked) файлами
git stash list                # stash@{0}, stash@{1}...
git stash pop                 # вернуть последний и удалить из списка
git stash apply stash@{1}     # вернуть конкретный, оставив в списке
git stash drop stash@{0}      # выбросить

Stash — временное хранилище, а не замена коммитам: он локальный, на сервер не уезжает и легко забывается на недели.

git revert

Отменяет изменения, внесённые коммитом, создавая новый коммит с обратными правками. История не переписывается — поэтому это единственный корректный способ откатить то, что уже ушло в общую ветку.

git revert a1b2c3d            # отменить один коммит
git revert HEAD               # отменить последний
git revert -m 1 <merge-sha>   # отменить merge-коммит
git revert --no-commit a1b2c3d b4e5f6a   # несколько, одним коммитом

revert vs reset

git revert git reset
Что делает Новый коммит-антипод Двигает указатель ветки назад
История Сохраняется Переписывается
Безопасно для общей ветки Да Нет
Типичное применение Откат бага с прода Правка своих локальных коммитов
git reset --soft HEAD~1    # снять последний коммит, правки оставить в staging
git reset --mixed HEAD~1   # снять коммит, правки в рабочем каталоге
git reset --hard HEAD~1    # снять коммит и выбросить правки — необратимо

git checkout и его замена

checkout исторически перегружен: он и переключает ветки, и восстанавливает файлы. Из-за этого в новых версиях Git его разделили на две понятные команды.

git checkout main             # старый способ переключиться
git switch main               # новый, только про ветки
git switch -c feature/new     # создать и перейти

git checkout -- file.py       # старый способ откатить файл
git restore file.py           # новый, только про файлы
git restore --staged file.py  # убрать из staging, правки оставить

git checkout <sha> переводит репозиторий в состояние detached HEAD: вы стоите на коммите вне ветки. Коммиты, сделанные здесь, никому не видны и потеряются при переключении — если понадобилось, создайте ветку: git switch -c fix-from-old.

Разбор ситуации

git log --oneline --graph --all -20   # как выглядит история на самом деле
git reflog                            # журнал всех перемещений HEAD
git show a1b2c3d                      # что именно менял коммит
git blame file.py                     # кто и когда написал строку
git diff --staged                     # что уйдёт в коммит

git reflog — страховка: даже после reset --hard или неудачного rebase потерянные коммиты находятся здесь и восстанавливаются через git switch -c recovery <sha>.

Связанные термины

  • Git — сама система контроля версий
  • Git-репозиторий — где хранится история
  • git rebase — перенос коммитов и правка истории
  • Git Flow — модели ветвления
  • Команды CLI — среда, где всё это выполняется
  • GitHub — типичный remote для push и pull

Готовы запустить GPU-задачу?

Запустить GPU-сервер