![Подружим Git с Intellij IDEA - 1](https://cdn.javarush.com/images/article/79ad25a0-a9cd-44c6-b9a1-46fac8b77c8e/800.jpeg)
Необходимые вводные:
- Прочесть, повторить и понять статью про гит. Это поможет быть уверенным, что все уже настроено и готово к работе
- Установить Intellij IDEA.
- Выделить часик личного времени для полного усвоения.
Клонируем проект локально
Здесь есть два варианта.- Если есть уже гитхаб аккаунт и хочется что-то потом запушить, лучше сделать форк проекта к себе и клонировать свою копию. Как сделать форк — я описывал в этой статье в главе пример the forking workflow.
- Клонировать с моего репозитория и проделать все локально без возможности все это дело запушить на сервер. Ведь это же будет мой репозиторий))
Копируем адрес проекта:
Открываем Intellij IDEA и выбираем Get from Version Control:
Копируем вставляем адрес на проект:
Вам предложат создать Intellij IDEA проект. Принимаем предложение:
Так как нет системы сборки, и это не входит в задачу статьи, выбираем Create project from existing sources:
Далее будет такая картина маслом:
С клонированием разобрались, теперь-то можно и оглянуться по сторонам.
Первый взгляд на Intellij IDEA как на гит UI
Присмотритесь еще раз внимательно на клонированный проект: уже там можно получить много информации о системе контроля версий. Первое — это Version Control панель в нижнем левом углу. В ней можно найти все локальные изменения и получить список коммитов (аналог git log). Перейдем в лекцию Log. Присутствует некая визуальная составляющая, которая помогает понять, как именно шел процесс разработки. Например, видно, что создавалась новая ветка с коммитом added header to txt, который после влился в мастер-ветку. Если нажать на коммит, в правом углу можно увидеть всю информацию о коммите: всех изменениях и его метаданных.![Подружим Git с Intellij IDEA - 8](https://cdn.javarush.com/images/article/0d12b07c-1fa0-4ef7-b837-29ee73a7dd46/1024.jpeg)
![Подружим Git с Intellij IDEA - 9](https://cdn.javarush.com/images/article/b55f959b-47fb-40f5-b514-ddae78005840/1024.jpeg)
![Подружим Git с Intellij IDEA - 10](https://cdn.javarush.com/images/article/de1d4f2d-6985-4519-b997-a9177064196b/1024.jpeg)
![Подружим Git с Intellij IDEA - 11](https://cdn.javarush.com/images/article/4ac0be8c-362a-4181-90dd-940bc52c919e/1024.jpeg)
Работа с репозиторием
Полезные горячие клавиши
Чтобы дальше работать, нужно запомнить несколько очень полезных горячих клавиш:- ctrl + t — получить последние изменения с удаленного репозитория (git pull).
- ctrl + k — сделать коммит/посмотреть все изменения, которые есть на данный момент. Сюда входят и untracked, и modified файлы (смотри мою статью про гит, там это описано) (git commit).
- ctrl + shift + k — это команда для создания пуша изменений на удаленный репозиторий. Все коммиты, которые были созданы локально и еще не находятся на удаленном, будут предложены для пуша (git push).
- alt + ctrl + z — откатить в конкретном файле изменения до состояния последнего созданного коммита в локальном репозитории. Если в левом верхнем углу выделить весь проект, то можно будет откатить изменения всех файлов.
![Подружим Git с Intellij IDEA - 12](https://cdn.javarush.com/images/article/d773592d-9546-4996-ac8b-dae4f34e4497/512.jpeg)
Что мы хотим?
Нам для работы, нужно освоить базовый сценарий, который используется везде. Стоит задача реализовать новую функциональность в отдельной ветке и запушить ее на удаленный репозиторий (дальше нужно создать еще пул-реквест на главную ветку, но это выходит за рамки нашей статьи). Что для этого нужно сделать?Получить все изменения на текущий момент в основной ветке (master, например).
На базе этой основной создать отдельную для своей работы.
Реализовать новую функциональность.
Перейти на основную ветку и проверить, не было ли новых изменений за время, пока работали. Если не было, то все хорошо, а если было, то делаем следующее: переходим на работающую ветку и делаем ребейз изменений из основной ветки в нашу. Если все прошло успешно, то отлично. Но вполне могут быть и конфликты. И их как раз можно будет заранее решить, не тратя время на удаленном репозитории.
Казалось бы, зачем это делать? Это правило хорошего тона, которое предотвращает возникновение конфликтов уже после пуша своей ветки на локальный репозиторий (есть, конечно, вероятность,что все равно они будут, но она становится значительно меньше).
- Запушить свои изменения на удаленный репозиторий.
Получить изменения с удаленного сервера?
Я добавил описание в README новым коммитом и хочу эти изменения получить. Предлагается выбор между мерджем и ребейзом в случае, если были сделаны изменения и в локальном репозитории и на удаленном. Выбираем мерж. Вводим ctrl + t:![Подружим Git с Intellij IDEA - 13](https://cdn.javarush.com/images/article/15db0ed2-6e5b-4594-8001-1c30bee809f6/1024.jpeg)
![Подружим Git с Intellij IDEA - 14](https://cdn.javarush.com/images/article/26f88ea8-55e2-41c5-a239-090a52aac35d/1024.jpeg)
Создать новую ветку на основе master
Здесь все просто.Переходим в правый нижний угол и нажимаем на Git: master, выбираем + New Branch.
Оставляем галочку Checkout branch и пишем имя новой ветки. Для меня это будет readme-improver.
![Подружим Git с Intellij IDEA - 16](https://cdn.javarush.com/images/article/14191089-542b-46f2-ad46-36c6746df7c5/512.jpeg)
После этого Git: master сменится на Git: readme-improver.
Имитируем параллельную работу
Чтобы конфликты появились, их кто-то должен создать :D Я через браузер отредактирую README новым коммитом и таким образом сымитирую параллельную работу. Мол кто-то во время моей работы сделал изменения в том же файле, что и я, что приведет к конфликту. Я удалю слово “полностью” из 10 строки.Реализовать свою функциональность
Задача стоит в том, чтобы поменять README и добавить описание к новой статье, то есть то, что работа в гите идет через Intellij IDEA. Добавляем это:![Подружим Git с Intellij IDEA - 17](https://cdn.javarush.com/images/article/9b5823ed-2cd2-42d2-a230-1b1029a7cd3e/1024.jpeg)
![Подружим Git с Intellij IDEA - 18](https://cdn.javarush.com/images/article/998b78eb-a1d9-4c36-8ebb-decc90f62bef/800.jpeg)
![Подружим Git с Intellij IDEA - 19](https://cdn.javarush.com/images/article/83caecf9-c4a4-4bf4-a704-a8acf1f6b464/512.jpeg)
Проверить, не изменилась ли основная ветка
Выполнили задачу, она работает, тесты написали, все хорошо. Но прежде чем пушить на сервер, нужно таки проверить, не было ли изменений в основной ветке за это время. Как это могло произойти? Очень просто: кому-то дали задачу после вас, и этот кто-то сделал ее быстрее вас. Поэтому переходим на master ветку. Для этого нужно в правом нижнем углу сделать то, что показано ниже на рисунке:![Подружим Git с Intellij IDEA - 20](https://cdn.javarush.com/images/article/13fd322e-a919-45ef-bb58-eb1f361c3b1e/512.jpeg)
![Подружим Git с Intellij IDEA - 21](https://cdn.javarush.com/images/article/67156e54-3f92-4b50-9de1-feb251b9efae/1024.jpeg)
![Подружим Git с Intellij IDEA - 22](https://cdn.javarush.com/images/article/7973c5dd-5229-4801-abe3-bd3ef68d83a8/512.jpeg)
![Подружим Git с Intellij IDEA - 23](https://cdn.javarush.com/images/article/ae09746d-6358-4582-90d0-abef0b293113/800.jpeg)
- accept yours — принять только изменения из readme-improver.
- accept theirs — принять только изменения из master.
- merge — самому выбрать, что нужно оставить, а что убрать.
![Подружим Git с Intellij IDEA - 24](https://cdn.javarush.com/images/article/098abe65-1229-42c2-9bde-f5725614ac9a/1080.jpeg)
- Это изменения из readme-improver.
- Результат. Пока что там так, как было до изменений.
- Изменения из master ветки.
![Подружим Git с Intellij IDEA - 25](https://cdn.javarush.com/images/article/1690e40a-73bc-4e84-9215-fb6f92931d08/512.jpeg)
Запушить изменения на удаленный сервер
Следующий шаг — запушить изменения на удаленный сервер и создавать пул-реквест. Для этого просто нажимаем ctrl + shift + k, после чего получим:![Подружим Git с Intellij IDEA - 26](https://cdn.javarush.com/images/article/8368b5c9-342f-4a4a-95a1-fbdbd0b5b3c0/800.jpeg)
![Подружим Git с Intellij IDEA - 27](https://cdn.javarush.com/images/article/b7df13fa-99fb-476a-bfa3-6404bb21e58d/512.jpeg)
Бонусная часть
Не хотел изначально добавлять создание пул-реквеста в статью, но получается не очень законченной из-за этого. Поэтому переходим на гитхаб репозиторий (если он ваш, конечно))) ) и видим, что гитхаб уже знает, что нам предложить:![Подружим Git с Intellij IDEA - 28](https://cdn.javarush.com/images/article/e177f128-6919-4a61-9ffb-0eab37f470f7/1024.jpeg)
![Подружим Git с Intellij IDEA - 29](https://cdn.javarush.com/images/article/702efad8-c260-47c1-aed7-2df573f42d02/1024.jpeg)
Полезные ссылки
- JavaRush: Начало работы с Git: подробный гайд для новичков
- GitHub: Демо-проект для работы
- JavaRush: Разбираем стратегии ветвления в Гите
- JetBrains: Set up a Git Repository
- Habr: Git rebase
- GitHub: Мой аккаунт
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ