Git
Git — система контроля версий: история изменений, ветки и совместная работа над кодом. Курс с нуля: установка, коммиты, отмена, ветки, удалённые репозитории, конфликты.
Git (читается «гит») — система контроля версий: программа, которая запоминает историю изменений файлов проекта. С ней можно посмотреть, что, когда и кем было изменено, вернуть файл к любой прошлой версии, вести несколько вариантов работы одновременно и объединять правки нескольких человек. Git бесплатен, его исходный код открыт, он работает в Windows, Linux и macOS.
Где применяется
Git — стандартный инструмент программиста: в нём хранят код почти все проекты, от школьной лабораторной до операционных систем. Кроме кода, в Git удобно держать любые текстовые файлы: настройки серверов, документацию, сайты, конспекты.
Git часто путают с GitHub. Git — программа на вашем компьютере. GitHub, GitLab и похожие сервисы — сайты, где хранятся копии репозиториев (репозиторий — папка проекта вместе со всей историей её изменений): через них проектом делятся, работают над ним вместе и обсуждают правки. Git работает и без них — история хранится прямо в папке проекта.
Что нужно для начала
- компьютер с Windows, Linux или macOS — Git ставится за несколько минут, как — в первых уроках;
- умение открыть терминал и набрать команду. В Windows вместе с Git ставится Git Bash — терминал, в котором все команды курса работают так, как написаны;
- любой текстовый редактор: Блокнот, nano, Visual Studio Code.
Знать язык программирования не нужно: в примерах курса — обычные текстовые файлы. Учётная запись на GitHub или GitLab понадобится только в уроке об удалённых репозиториях.
Как пройти курс
Уроки идут по порядку: что такое Git, установка, первый репозиторий, история и отмена изменений, ветки, работа с сервером, конфликты, файл .gitignore и работа в команде. Повторяйте команды в своей учебной папке — Git лучше всего запоминается руками. После каждого урока — вопросы для проверки, в конце — итоговый тест.
В справочнике — короткие ответы на частые вопросы: как отменить коммит (сохранённую версию файлов), удалить ветку, разобраться с ошибкой rejected или Permission denied (publickey).
Сообщения Git в курсе показаны на английском. Если Git у вас пишет по-русски, смысл сообщений тот же. Номера коммитов и даты у вас будут другими: они свои у каждого репозитория.
Курс с нуля
- 1.Что такое Git и зачем он нуженЧто такое система контроля версий, как Git хранит историю, что такое репозиторий, коммит, ветка и индекс и чем Git отличается от GitHub.
- 2.Установка и настройка GitКак установить Git в Windows, Linux и macOS, проверить версию и сделать первую настройку — имя, почта, редактор и имя основной ветки.
- 3.Первый репозиторий: init, status, add, commitКак создать репозиторий командой git init, добавить файлы в индекс, сделать первый коммит и посмотреть историю — по шагам, с выводом каждой команды.
- 4.История и отмена измененийКак смотреть историю и разницу между версиями (log, show, diff), отменять правки в файлах (restore), убирать коммиты (reset) и безопасно отменять отправленные (revert).
- 5.Ветки: branch, switch, mergeЧто такое ветка в Git, как создать её и переключиться, как слить ветку с основной (fast-forward и коммит слияния) и удалить ненужную.
- 6.Удалённые репозитории: clone, push, pull, fetchКак связать репозиторий с сервером вроде GitHub или GitLab, отправить коммиты (push), забрать чужие (pull, fetch), склонировать проект и что значат частые ошибки обмена.
- 7.Конфликты слияния и как их решатьПочему возникает конфликт слияния, как читать метки <<<<<<< ======= >>>>>>>, решить конфликт вручную или выбрать одну сторону, отменить слияние и реже попадать в конфликты.
- 8.Файл .gitignore: что не класть в репозиторийКак исключить из Git временные файлы, папки сборки, зависимости и секреты с помощью .gitignore: правила шаблонов, примеры, проверка и что делать с уже добавленными файлами.
- 9.Работа в команде: pull request и rebaseКак работают над одним проектом вместе: ветка на задачу, pull request и проверка кода, форк чужого проекта, обновление ветки через merge или rebase и когда rebase опасен.
Справочник
- git stash — отложить измененияКак временно убрать незаконченные правки командой git stash, переключиться на другую задачу и вернуть их через git stash pop; список, сообщения, новые файлы и конфликты.
- Как добавить SSH-ключ для GitHubКак создать SSH-ключ, добавить его в учётную запись GitHub или GitLab, проверить подключение и перевести репозиторий с HTTPS на SSH — для Windows, Linux и macOS.
- Как изменить сообщение коммитаКак исправить сообщение последнего коммита через git commit --amend, добавить в него забытый файл, изменить старый коммит и что делать, если коммит уже отправлен.
- Как клонировать репозиторийКак скачать репозиторий с GitHub, GitLab или своего сервера командой git clone: в какую папку, по HTTPS или SSH, только одну ветку или без всей истории.
- Как откатить файл к прошлой версииКак вернуть файл к состоянию последнего коммита или любой прошлой версии, восстановить удалённый файл и отменить все локальные изменения в Git.
- Как отменить последний коммитКак отменить последний коммит в Git: сохранить изменения или выбросить их, отменить уже отправленный коммит через revert и вернуть коммит, убранный по ошибке.
- Как переключиться на другую веткуКак перейти на другую ветку в Git командами switch и checkout, переключиться на ветку с сервера и что делать, если мешают незакоммиченные изменения.
- Как посмотреть историю файлаКак посмотреть все изменения одного файла в Git: список коммитов, сами правки, историю после переименования, автора каждой строки (blame) и содержимое файла в прошлой версии.
- Как решить конфликт в GitКороткий порядок действий при конфликте в Git: найти файлы, убрать метки, отметить решение и завершить merge, pull или rebase, взять одну сторону или отменить всё.
- Как убрать пароль из истории GitЧто делать, если в коммит попал пароль, токен или ключ: сменить секрет, убрать его из последнего коммита или переписать всю историю через git filter-repo и что останется на сервере.
- Как удалить ветку в GitКак удалить ветку в Git — локальную (branch -d и -D) и на сервере (push --delete), почистить список удалённых веток и вернуть ветку, удалённую по ошибке.
- Как удалить файл из репозитория, но оставить на дискеКак перестать отслеживать файл или папку в Git командой git rm --cached, не удаляя их с диска, и сделать так, чтобы они больше не попадали в коммиты.
- Ошибка fatal: not a git repositoryЧто значит ошибка fatal: not a git repository (or any of the parent directories): .git и как её исправить — перейти в папку проекта, склонировать или создать репозиторий.
- Ошибка Permission denied (publickey) в GitПочему git push, pull или clone отвечает Permission denied (publickey) и Could not read from remote repository и как это исправить: ключ, адрес, sudo, файл ~/.ssh/config.
- Ошибка Please tell me who you are при коммитеПочему git commit пишет Author identity unknown и Please tell me who you are и как задать имя и почту автора — для всех репозиториев или только для одного.
- Ошибка rejected — non-fast-forward при git pushПочему git push отвечает rejected (non-fast-forward) или (fetch first), как забрать изменения и отправить свои, что делать с divergent branches и refusing to merge unrelated histories.
- Чем git pull отличается от git fetchРазница между git fetch и git pull: что скачивается, что меняется в ваших файлах и ветках, как посмотреть чужие изменения перед слиянием и что такое origin/main.
- Что такое detached HEAD и как вернуться на веткуЧто значит сообщение You are in 'detached HEAD' state, как вернуться на ветку и как сохранить коммиты, сделанные в этом состоянии, чтобы они не потерялись.
Официальная документация
- Справочник команд Git (на английском) — https://git-scm.com/docs
- Книга Pro Git на русском — https://git-scm.com/book/ru/v2
- Загрузка Git — https://git-scm.com/downloads