Git
Что такое Git?
Git записывает каждое сохранение в точку под названием commit. Commit — не полная копия проекта, а отличие от прошлого состояния. История остаётся на компьютере. GitHub и GitLab — сайты, чтобы делиться этой историей. Это не сам Git.
Для чего нужен Git?
Git нужен даже когда работает один человек. Он нужен, чтобы вернуться от плохой правки и взять чужой код, не смешивая его руками.
- Вернуться до плохого commit
- Держать две идеи на разных ветках
- Отправить на сервер только готовый код
- Трогать тот же файл, что и команда
Что можно делать с Git?
Через Git следят за папкой, выбирают изменение и делают commit, открывают ветку и отправляют на дальний адрес. Можно посмотреть старый commit и вернуть файл к состоянию того дня. Сам Git не запускает сайт и не проверяет код.
Сложно ли освоить Git?
Первые три команды простые: status, add, commit. Трудность начинается с ветки, слияния и конфликта. Когда двое меняют одну строку, Git сам не выбирает верную. Секрет, пароль и огромный файл не должны попасть в commit.
Плюсы и ограничения
Плюс: история остаётся, ошибку можно отменить, несколько человек работают в одном проекте. Ограничение: Git — не служба резервных копий и не сам сайт на сервере. Сообщение commit должно быть коротким и ясным, иначе историю не прочитать.
Основные понятия
Рабочая папка, commit и дальний адрес — три разных места. Ветка — линия, которая отходит от той же истории.
- status показывает, что изменилось
- add кладёт выбранный файл в следующий commit
- commit создаёт точку с сообщением
- push отправляет эту точку на дальний адрес
Короткий пример
Эти три команды смотрят состояние, выбирают файлы и сохраняют их с коротким сообщением. Напиши сообщение под своё изменение.
git status git add . git commit -m "First note"
Рабочие примеры
Три строки выше сохраняют всё сразу. Эти примеры делают меньшую работу и говорят, что должно появиться на экране. Запускай их в папке, которая уже является проектом Git. Если git status говорит, что это не репозиторий, папка не начата через git init.
Сохранить один файл, а не всю папку
status перечисляет, что изменилось и за чем Git ещё не следит. add note.txt выбирает для следующего сохранения только этот файл. Другие изменённые файлы остаются снаружи. commit записывает точку. Текст в кавычках — сообщение. Оно должно говорить, что ты сделал, а не просто update. Если напишешь git add ., каждое изменение в папке попадёт в ту же точку.
git status git add note.txt git commit -m "Add the note"
После commit git status говорит, что рабочее дерево чистое. note.txt в истории. Второго файла, который ты не добавил, там нет.
Увидеть изменённые строки до сохранения
diff показывает разницу между файлом сейчас и последним commit. Строка, которая начинается с +, добавлена. Строка с - удалена. Это не commit. Пока ничего не сохранено. Если ничего не менялось, команда ничего не печатает. Прочитай это до add, чтобы не сохранить пароль или недописанную строку по ошибке.
git diff
Экран — это сравнение, а не новая точка в истории. Закрыть терминал — не отменить правку в файле.
Прочитать историю короткими строками
log перечисляет commit. --oneline кладёт каждый в одну строку. Самый новый commit сверху. Короткое слово в начале — это id. Его используют, когда нужно посмотреть старую точку. Сообщение — текст, который ты написал в commit. Если все сообщения update, список не говорит, что изменилось.
git log --oneline
Видна одна строка на каждое сохранение. Верхняя строка — последний commit. Более старые стоят под ней.
Отправить свой шаг и взять чужой
push отправляет commit с твоего компьютера на адрес, который ты связал, часто на GitHub. pull приносит commit, которые есть на том адресе, но нет на твоей машине. Это не одна команда. push не скачивает новую работу товарища. pull не загружает твою. Если pull останавливается и говорит о конфликте, одна строка изменена в обоих местах. Git сам верную строку не выбирает. Выбираешь ты.
git push git pull
После чистого push на сайте есть твой последний commit. После чистого pull в папке есть commit, которые были только на сайте.
Частые вопросы
- Git и GitHub — одно и то же? Нет. Git — инструмент. GitHub — сайт, который хранит эту историю.
- Git только для кода? В основном для текстовых файлов. Для картинок и видео это плохой путь.
- Каждое сохранение — это commit? Нет. Сначала выбираешь файл, потом пишешь commit.