Перевод статьи «How to learn Git slowly».
Эту заметку я написал для своей жены, которая, будучи одной из умнейших людей, с которыми я знаком, все еще не может освоить Git.
Я уже довольно давно занимаюсь обучением будущих веб-разработчиков. Это дает мне преимущество: я могу отслеживать, какие ошибки чаще всего допускают новички.
Что касается изучения Git… это непростая задача. Поэтому новички легко путаются. А ошибки стоят дорого: никто не хочет быть тем самым парнем, который стер чужую работу.
Лучший способ освоить Git — делать это постепенно. И чтобы стать мастером, потребуется некоторое время.
Это руководство призвано облегчить вашу участь за счет упорядочивания учебного пути и разделения его на простые шаги. Только не забывайте, что перед переходом на каждый новый уровень нужно непременно хорошенько освоить предыдущий!
1. Основы. Использование Git в одиночку
Начните с использования Git для личных нужд. Пока не думайте ни про какие ветки, делайте все в main.
Концепции, в которых нужно досконально разобраться:
- В чем разница между Git и GitHub?
- Что такое коммит?
- Что такое стадия стейджинга?
- Что такое ветка?
- Что из себя представляют удаленный и локальный репозитории?
- Как установить один или несколько upstream-репозиториев?
- Как делать коммиты?
- Как делать push / pull в upstream-репозиторий?
Команды, которые нужно хорошенько освоить:
- git init
- git clone <repository>
- git status
- git add <file>
- git add —all
- git commit
- git remote add
- git remote set-url
- git remote -v
- git push <repository> <branch>
- git pull <repository> <branch>
2. Основные инструменты
Эти вещи помогут вам начать пользоваться Git как рабочим инструментом. Также на этом этапе нужно уделить немного времени изучению настроек.
Концепции, в которых нужно досконально разобраться:
- Файл .gitignore
- Файл .gitconfig
- Просмотр лога коммитов
- Манипуляции с файлами при помощи reset, clean, checkout <file>, rm
- Манипуляции с репозиторием при помощи stash
Команды, которые нужно хорошенько освоить:
- git log (with and without —stat)
- git checkout <file>
- git reset <file> (ОСТОРОЖНО!)
- git reset —hard (ОСТОРОЖНО!)
- git clean -f (ОСТОРОЖНО!)
- git rm <file> (ОСТОРОЖНО!)
- git config —global user.name
- git config —global user.email
- git stash
- git stash apply
- git stash clear (несколько небезопасно)
3. Основы сотрудничества
На этом этапе нужно научиться сотрудничать с другими людьми. Научиться нужно ДО начала любой совместной работы.
Концепции, в которых нужно досконально разобраться:
- Ветки: что они из себя представляют, зачем они нужны, как ими пользоваться
- Мерж
- Соглашения об именовании веток
- Как писать хорошие сообщения коммитов
- Что такое форк репозитория?
Команды, которые нужно хорошенько освоить:
- git merge
- git branch
- git checkout <branch>
- git checkout -b
- git blame <file>
4. Основы сотрудничества: rebase и пул-реквесты
Я выделил эту тему, потому что на этом этапе появляется первая команда, с помощью которой можно навредить вашему удаленному репозиторию: git push —force-with-lease.
Конечно, если вы делаете rebase своей локальной ветки, вам придется сделать пуш с этой опцией в удаленный репозиторий. В общем, это опасно, но научиться этому надо, если хотите уметь работать в команде.
Я также добавил здесь тему пул-реквестов. Это важная концепция, но по сути она больше касается работы с GitHub/GitLab, чем собственно с Git.
Концепции, в которых нужно досконально разобраться:
- Простой rebase (и его отличие от мержа)
- Что такое пул-реквесты?
- Как сделать PR из ветки в ветку?
- Как сделать PR из форка в оригинальный репозиторий?
Команды, которые нужно хорошенько освоить:
- git rebase
- git push —force-with-lease (ОСТОРОЖНО!)
5. Уверенное использование Git
На этом этапе вы должны научиться лучше организовывать историю своей работы и ветки, а также легко перемещаться по истории.
Концепции, в которых нужно досконально разобраться:
- Как переписывать локальную историю
- Интерактивный rebase
- Управление ветками (prune, fetch)
- Использование HEAD-нотации или хешей коммитов
- Использование diff для сравнения коммитов
- Как сделать revert коммита
Команды, которые нужно хорошенько освоить:
- git commit —amend
- git rebase -i
- git prune
- git fetch
- git remote prune
- git checkout HEAD/HEAD~1/<commit hash>
- git diff <commit hash 1> <commit hash 2>
- git revert <commit hash>
6. Продвинутый уровень
На этом уровне нужно научиться исправлять то, что наделали сами или кто-то другой.
Концепции, в которых нужно досконально разобраться:
- Что такое reflog?
- Как убрать конфиденциальные данные из репозитория
- Как эффективно определять плохие коммиты
Команды, которые нужно хорошенько освоить:
- git reflog
- git-filter-branch
- git-filter-repo
- git bisect
В качестве эффективной альтернативы командам git-filter я рекомендую BFG.
Итоги
Надеюсь, это руководство поможет вам определить приблизительный маршрут при изучении Git. Если тут пропущена какая-нибудь важная команда, дополняйте в комментариях!
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]
Ненавижу CLI.
Это дерьмо диназавра зародилось на заре комп.эры и если как-то эволюционировало, то только в худшую сторону, т.е. оно становится все сложней и монструозней.
Например, тот же git log это что-то около 40 страниц в манах.
Если в языках программирования давно уже стало общим местом, что функция должна выполнять только одну функцию и иметь миниум, в идеале 0, параметров, то каждая команда CLI имеет обычно около десятка параметров и выполняет 2**10 = 1024 функции при условии что параметры бинарные.
Не расстраивайся, чуть чуть подрастёшь, попрактикуешься и у тебя всё начнёт получаться. До cli нужно просто дорасти.