Программирование и IT

Команды git

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

Обновлено
В этой статье

Как устроена шпаргалка#

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

Почти у всех команд одинаковый скелет: git — имя команды — ключи —
объекты, к которым применить. Если забыли ключ, подсказка рядом:
git help commit открывает полную справку, git commit -h — короткий
список ключей прямо в терминале.

Начало работы#

Команда Что делает
git init превращает обычную папку в репозиторий, создавая служебный каталог .git
git clone <адрес> забирает готовый репозиторий с сервера вместе со всей историей
git config --global user.name записывает имя автора, которое попадёт во все коммиты
git remote -v показывает, с какими серверами связан репозиторий

Подробный разбор первой из них — в статье про
git clone: там же про ключи --depth и --branch
и про то, что делать, когда клонирование обрывается.

Круг обычного дня#

Команда Что делает
git status перечисляет изменённые, подготовленные и неизвестные git файлы
git add <файл> отправляет текущее состояние файла в индекс, к будущему коммиту
git diff показывает правки, которые ещё не попали в индекс
git diff --staged показывает то, что уже отобрано и уйдёт в коммит
git commit -m "текст" записывает содержимое индекса в историю отдельным коммитом
git log --oneline -10 десять последних коммитов по строке на каждый
git show <хеш> полностью показывает один коммит: сообщение и правки
git restore <файл> возвращает файлу состояние из последнего коммита

Эти восемь закрывают большую часть работы. Если из всего списка выучить
одну, пусть это будет git status: она отвечает на вопрос «что сейчас
происходит» и почти всегда подсказывает следующую команду. Про запись в
историю подробно — git commit.

Ветки и слияние#

Команда Что делает
git branch список веток, звёздочкой отмечена текущая
git switch <ветка> переключается на другую ветку
git switch -c <ветка> создаёт ветку и сразу переходит на неё
git merge <ветка> вливает названную ветку в текущую
git stash откладывает незаконченные правки, чтобы переключиться налегке

Работа с указателями разобрана в статье про
git branch — включая состояние detached HEAD, в
которое легко попасть случайно. Соединение историй и разбор конфликтов —
в статье про git merge.

Обмен с сервером#

Команда Что делает
git fetch скачивает чужие коммиты, но твои файлы не трогает
git pull скачивает и сразу вливает их в текущую ветку
git push отправляет твои коммиты в удалённый репозиторий
git push -u origin <ветка> отправляет новую ветку и связывает её с серверной
git tag -a v1.0 -m "текст" ставит именованную метку на коммит

Разница между скачиванием и вливанием — тема статьи про
git pull, а отказы сервера при отправке разобраны в
статье про git push.

Исправление ошибок#

Команда Что делает
git restore --staged <файл> убирает файл из индекса, не трогая сам файл
git reset --soft HEAD~1 снимает последний коммит, оставляя правки подготовленными
git revert <хеш> создаёт новый коммит, отменяющий указанный
git reflog перечисляет прежние положения HEAD — по нему находят «пропавшее»
git rm --cached <файл> снимает файл с учёта, оставляя его на диске

Из всего списка по-настоящему опасен только git reset --hard: он стирает
незакоммиченные правки без возможности вернуть их. Всё, что попало хотя бы
в один коммит, почти всегда достаётся обратно через git reflog, даже
если ветка удалена.

С чего начать, если всё это впервые#

Заведи тренировочный репозиторий из трёх текстовых файлов и пройди
круг целиком: init, add, commit, ветка, правка в ветке, слияние,
конфликт нарочно, отмена. Полчаса такой работы дают больше, чем
перечитывание списка команд, потому что запоминается не текст, а
последовательность.

Дальше заведи файл .gitignore — без него в проекте
быстро становится шумно. И приучись перед каждой командой, меняющей
историю, смотреть git status и git log --oneline -5: две секунды
проверки экономят вечер разбирательств.

План по этапам

  1. Настроить имя и почтуgit config --global user.name и user.email — один раз на компьютер.
  2. Получить репозиторийgit init для нового проекта или git clone для существующего.
  3. Освоить круг дняstatus, add, commit, log — пока не перестанешь подглядывать в шпаргалку.
  4. Добавить веткиswitch -c, работа, merge; конфликт создать нарочно и разобрать.
  5. Подключить серверpush -u, затем pull перед каждой отправкой.
  6. Выучить отменыrestore, reset --soft, revert, reflog — до того, как понадобятся срочно.

Начать изучать эту тему у себя

План ляжет в твой репозиторий: отмечай этапы, веди конспект — история изменений покажет, как ты продвинулся.

Начать план

Проверь себя

1.Какая команда покажет, какие файлы изменены и что уже отобрано в коммит?

2.Ты отобрал файл в индекс по ошибке. Как убрать его оттуда, не теряя правок?

3.Какая команда помогает найти коммиты удалённой ветки?

4.Что делает git fetch в отличие от git pull?

Источники

Было полезно?

Ещё темы

Программирование и IT Команды Linux Терминал Linux устроен одинаково у всех дистрибутивов: имя команды, ключи, объекты. Ниже — шесть таблиц по областям работы, в каждой по строке на команду и пример вызова, который можно набрать и сразу увидеть результат. Программирование и IT Markdown таблица Таблица в markdown собирается из вертикальных черт и строки-разделителя под шапкой. Ниже — синтаксис таблиц с выравниванием столбцов и короткая шпаргалка по остальной разметке: заголовки, списки, ссылки, картинки, код, цитаты и списки задач. Программирование и IT Как создать репозиторий с нуля Репозиторий — это папка проекта плюс скрытая папка `.git`, в которой хранится вся история. Создаётся одной командой, но между ней и первым осмысленным коммитом есть несколько шагов, которые потом трудно переделать: имя ветки, список игнорируемых файлов, привязка к серверу. Программирование и IT git commit Коммит — это сохранённое состояние проекта с автором, временем и сообщением. Команда git commit берёт то, что ты заранее отобрал командой git add, и записывает это в историю одной неделимой порцией. Программирование и IT git merge Слияние переносит работу из одной ветки в другую. Команда git merge берёт указанную ветку и соединяет её историю с текущей — иногда просто сдвигая указатель, иногда создавая отдельный коммит, а иногда останавливаясь и прося помощи. Программирование и IT git push Пока ты не выполнил git push, твои коммиты существуют только на твоём диске. Команда отправляет их в удалённый репозиторий и сдвигает там указатель ветки — поэтому она же чаще всего и отказывает, если кто-то успел отправить своё раньше.

Ещё сценарии

Аналог GitLab Если GitLab нужен тебе ради репозиториев, задач и ревью кода, а поддерживать свой сервер не хочется, Skillok закрывает эту часть. Если же ты живёшь в GitLab CI и реестре пакетов — честно говоря, это пока не про нас. Разберём, что совпадает и что нет. LMS для небольшой команды Полноценная LMS — это десятки функций, большая часть которых небольшой команде не нужна. В Skillok учебная часть собрана из немногих вещей — курсы с автопроверкой, материалы с историей и задания с ревью. Ниже — что именно есть, чтобы ты решил, хватит ли этого. СДО для сотрудников Классическая СДО — это курсы, назначения, отчёты и сертификаты. Skillok закрывает часть этих задач иначе — через репозиторий материалов, задачи-назначения и курсы с автопроверкой. Если тебе нужны отчёты по каждому сотруднику и совместимость со SCORM — честно скажем сразу, этого нет.