Зачем нужен Git
- хранит историю: кто, когда и что изменил;
- позволяет вернуться к любой версии;
- дает ветки для параллельной работы;
- нужен для совместной работы и выката кода.
Установка
sudo apt install gitbrew install gitВ Windows: winget install Git.Git. Проверка:
git --versionПервая настройка
git config --global user.name "Имя Фамилия"git config --global user.email "me@example.com"git config --global init.defaultBranch maingit config --global core.autocrlf inputgit config --global pull.rebase falsegit config --listВ Windows для core.autocrlf ставьте true.
Три области Git
рабочая папка --git add--> индекс (staging) --git commit--> репозиторий- Рабочая папка — файлы, которые вы правите.
- Индекс — то, что войдет в следующий коммит.
- Репозиторий — сохраненная история коммитов.
Создание репозитория
mkdir projectcd projectgit initПоявится скрытая папка .git: в ней вся история. Удалите ее, и репозиторий исчезнет.
Цикл работы
echo "Hello" > hello.txtgit statusgit add hello.txtgit commit -m "Add hello.txt"Основные команды:
| Команда | Действие |
|---|---|
git status | состояние файлов |
git add файл | добавить в индекс |
git add . | добавить все изменения |
git add -p | добавлять по частям, выборочно |
git commit -m "текст" | создать коммит |
git commit -am "текст" | закоммитить все отслеживаемые изменения |
Просмотр истории
git loggit log --onelinegit log --oneline --graph --allgit log -p файлgit log --author="Anna"git show HEADgit show a1b2c3dHEAD — указатель на текущий коммит. Каждый коммит имеет хэш, например a1b2c3d: достаточно первых 7 символов.
Просмотр изменений
git diffgit diff --stagedgit diff main..featuregit diff HEAD~1git diff— изменения, не добавленные в индекс;git diff --staged— изменения в индексе, то есть что попадет в коммит.
Удаление и переименование
git rm файлgit rm --cached файлgit mv старое.txt новое.txt--cached убирает файл из Git, но оставляет на диске.
.gitignore
Файл со списком того, что Git не отслеживает:
node_modules/target/build/*.log.env.idea/.vscode/.DS_StoreПравила:
- в репозиторий не кладут зависимости, результат сборки, логи и секреты;
.gitignoreсоздают в самом начале проекта;- уже закоммиченный файл игнор не затронет: сначала
git rm --cached файл.
Готовые шаблоны для любого языка: github.com/github/gitignore.
Хорошее сообщение коммита
Add email validation to signup formReject addresses without domain part. Previously such userswere created and failed later at confirmation step.- первая строка до 50–70 символов, в повелительном наклонении: «Add», «Fix», «Remove»;
- пустая строка, затем пояснение, почему сделано изменение;
- один коммит — одно логическое изменение;
- не коммитьте «wip», «fix», «asdf».
