Программирование и 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: две секунды
проверки экономят вечер разбирательств.
План по этапам
- Настроить имя и почтуgit config --global user.name и user.email — один раз на компьютер.
- Получить репозиторийgit init для нового проекта или git clone для существующего.
- Освоить круг дняstatus, add, commit, log — пока не перестанешь подглядывать в шпаргалку.
- Добавить веткиswitch -c, работа, merge; конфликт создать нарочно и разобрать.
- Подключить серверpush -u, затем pull перед каждой отправкой.
- Выучить отменыrestore, reset --soft, revert, reflog — до того, как понадобятся срочно.
Начать изучать эту тему у себя
План ляжет в твой репозиторий: отмечай этапы, веди конспект — история изменений покажет, как ты продвинулся.
Проверь себя
1.Какая команда покажет, какие файлы изменены и что уже отобрано в коммит?
2.Ты отобрал файл в индекс по ошибке. Как убрать его оттуда, не теряя правок?
3.Какая команда помогает найти коммиты удалённой ветки?
4.Что делает git fetch в отличие от git pull?
Источники
-
Pro Git, книга на русскомПолный учебник, первые три главы закрывают всю шпаргалкубесплатно
-
Справочник команд gitОфициальные страницы справки по каждой командебесплатно
Было полезно?