Git и GitHub
Термины
Комит (commit) — зафиксированная (сохраненная) после изменений версия разрабатываемого приложения. Еще в аналогию к понятию коммит приволят слово «слепок».
Проиндексировать файлы — пометить (подготовить) файлы, поместив их в так называемый стейдж. Это нужно сделать, чтобы можно было их закомитить, т.е. добавить в репозиторий, как одну из версий изменений.
Закомитить /создать слепок / зафиксировать изменения файлов – это означает создать снимок состояния проиндексированных файлов рабочей директории (папки). Проще говоря – сохранить текущую версию разрабатываемого приложения или его части.
Начало работы с Git
- Устанавливаем сам Git на ПК (как любую другую программу на вашей ОС).
- В консоли указываем свое имя, чтобы потом его содержал каждый комит:
git config --global user.name "Vasya Pupkin"
- Указываем также свою почту:
git config --global user.name "vaspupkin@gmail.com"
- Можно посмотреть теперь наш config:
git config --list
- Можно посмотреть список всех команд
git help
либо описание отдельной команды:git [имя команды] --help
Основные команды для работы с Git
- Импортировать в Git существующий текущий каталог:
git init
- Проверить статус файлов:
git status
Красным показывет те файлы, которые еще не проиндексированы (не помечены для дальнейшего комита). Зеленым – уже проиндексированные.
- Добавить файлы в индекс (пометить для коммита):
git add .
Точка означает «все файлы». Т.е. будут проиндексированы все возможные файлы, которые изменились в данной директории (папке). Какие файлы были проиндексированы можно проверить через вышеупомянутую коману для проверки статуса.
- При необходимости можно удалить ненужные файлы из индекса (стейджа):
git restore --staged [name file]
- Закомитить:
git commit -m [name of commit]
Заливка созданных версий приложения на удаленный репозиторий
GitHub — самый популярный на сегодня удаленный репозиторий.
- Зарегистрироватьсян на GitHub или войти в аккаунт.
- Создать новый репозиторий, нажав на плюсик в верхнем правом углу и «New repository». Приватный являетяс платным.
- Определяем удаленный репозиторий через консоль
git remote add origin [url нашего созданного репозитория]
- Заливаем:
git push -u origin master
, где origin – название нащешл ремоута (удаленного репозитория), а master – имя ветки. Если история коммитов отличается, то гит не даст их запушит просто так. Нужно тогда сделать это принудительно –git push --force origin master
- GitHub запросит наш логин и пароль поочередно, после чего произойдет заливка локального репозитория на удаленный со всеми созданными ранее комитами.
Копирование на ПК уже созданного на GitHub проекта
- Клонирование репозитория с GitHub:
git clone [url проекта]
Как переключаться между версиями?
- Открываем графическую оболочку для переключения версий:
gitk --all
- Копируем SHA 1 ID — строку с длинным кодом версии (очень много букв и цифр) с помощью комбинации ctrl + insert.
- Вводим в консоль:
git checkout [наш скопированный ID версии]
- Теперь все файлы в текущей директории содержат код той версии, которую мы подключили.
СПИСОК РАЗЛИЧНЫХ КОМАНД
Ветки и их соединение
git branch <name branch>
– создать веткуgit checkout <name branch>
– перейти в веткуgit checkout -b <name branch>
– создать ветку и перейти в нееgit merge <name branch>
– слияние текущей ветки с <name branch>git merge <branch 2> <branch 1>
– перешли в ветку <branch 2> и выполнили слияние ее с <branch 1>git rebase <name branch>
– переобразование (rebasing), которое по предназначению напоменает слияние, но здесь текущая ветка становися поверх указанной <name branch> и перезаписывает коммиты, чего не происходит при слиянии. Эта команда позволяет делать проект чище, но должна выполняться с осторожностью и в случаях, когда текущая ветка не являетяс публичной и в ней никто не работает.git rebase i <name branch>
– более контролируемое преобразование, при ктором можно конкретно указывать коммиты, которые будут соединены. Чтобы его выполнить, в появившемся wix (подобие файлового редактора) меняем у одного из коммитов «pick» на «squash«. Именно его он после сохранения файла и сольется с предыдущими коммитами, у которых остался указанным «pick«, а сами они исчезнут.Перемещение
git checkout <branch name>^
– шаг назад по коммитам ветки (т.е. переключение на предыдущий коммит)git checkout <branch name>^^
– два шага назад по коммитам ветки (т.е. переключение на прародителя)
либо можно вместо <branch name> написать <HEAD> – это текущий коммит. Т.е. можно писать:
git checkout <HEAD>^ или git checkout <HEAD>^^
git checkout <HEAD>~4
– переместиться на 4 коммита назад.git branch -f <branch name> HEAD~3
– принудительно (о чем говорит -f, т.е. forcing) переместить ветку <branch name> на 3 родителя назад. Чтобы сработало HEAD в текущий момент должно быть установлено в эту ветку (т.е. git checkout <branch name>)
Также можно ветку переместить принудительно не на несколько шагов, а непосредственно указав коммит:
git branch -f <branch name> <id commit> – переместить ветку <branch name> на коммит <id commit>
Отмены
git stash
– убирает все изминения, котоыре не были закоммичены с файлов.git stash pop
– возвращает изменения, убранные предыдущей командой.
git reset HEAD~1
либо git reset <name commit>
– отменяет изменения, перенося ссылку на ветку назад, на более старый коммит, как будто некоторых коммитов вовсе и не было. Это своего рода «переписывание истории». Проблема в том, что этот метод работает отлично только локально и не подойдет для отмены / удаления коммитов удаленно в тех ветках, где работают другие пользователи. Для этого нужен git revert.git revert <name commit>
– по факту создает на основании указанного в команде коммита новый вместо текущего проблемного. Т.е. откатывает последние изменения к тому коммиту, когда все было хорошо, создав его копию в конце ветки. Этот коммит можно запушить, чобы поделиться изменениями с остальными.
git branch -d <name branch>
– удалить ветку