В данном wiki я постараюсь ответить на следующие вопросы:
- Зачем делать
commit
в ветке проекта в конце рабочего дня? - Как и когда надо обновлять
main
ветку проекта? - В чем отличие
git rebase
отgit merge
? - Как синхронизировать изменения из одной рабочей ветки в другую?
Зачем делать commit в ветке задачи (task) в конце рабочего дня?
Допустим вы взяли в работу task. Создали отдельную от main ветку и стали писать код. Что делать в конце рабочего дня?
Правильно!
git push
Создание коммита по окончанию дневной работы над проектом несёт ряд преимуществ:
- Сохранение текущего состояния проекта: Вы избегаете риска потери важной информации, если что-то случится с вашим компьютером или веткой проекта.
- Хранение изменений в коммитах позволяет лучше разделять работу и получать более чёткие истории изменений.
- Если в процессе разработки, что-то пошло не так: обнаружили ошибку или проблему, которую необходимо исправить, но не хотите терять все изменения внесённые в течение дня, то вы можете использовать команду
git revert
для отмены последнего коммита и возврата к предыдущему состоянию ветки. - Так как разработчики зачастую работают в команде, создание коммита помогает другим разработчикам понять, что вы закончили работу и что в вашей ветке есть важные изменения, которые могут быть включены в общую ветку проекта. Это позволяет более эффективно координировать работу в команде и избежать конфликтов при слиянии веток.
Зачем обновлять main
ветку проекта ?
Рабочий день окончился, вы выключили компьютер, завтра вы начнёте с того места, на котором остановились. С чего мы начнём? - Мы подгрузим изменения с gitLab в нашу локальную ветку main, используя команду:
git pull
Так как мы выполняем task, то для неё мы сделаем дополнительно:
git rebase
В зависимости от задач можно использовать git merge
Если сделали какие-то изменения в коде, отправьте коммиты в свою ветку на gitLab, не должно быть такой ситуации, что вы сделал сделали один коммит с полной выполненной задачей, где изменений на миллиард строк, которые будем разбирать командой несколько лет). Задача должна быть разбита на коммиты, а коммиты должны быть атомарными
В чём отличие git rebase
от git merge
?
Подробнее про Git merge Подробнее про Git rebase
При использовании git merge
создается новый коммит с объединенными изменениями, который имеет двух родителей, и история коммитов становится более ветвистой. Это полезно, если вы хотите сохранить историю разных веток и хранить их изменения отдельно.
При использовании git rebase
вы переносите все ваши изменения из текущей веткина вершину другой ветки, а затем создается новый коммит, который содержит все изменения из обеих веток. Это позволяет создавать более линейную историю коммитов, что облегчает отслеживание изменений и упрощает работу с командой.
Решение конфликтов: При использовании git merge
конфликты, если они возникают, решаются в отдельном коммите, который содержит изменения из обеих веток, а при использовании git rebase
конфликты разрешаются на лету, когда Git переносит изменения из одной ветки в другую.
Как синхронизировать изменения из одной рабочей ветки в другую?
Например, ты отправил на код-ревью первую таску , её еще не объединили с main - веткой, а тебе нужно подгрузить изменения с неё (синхронизировать код между двумя рабочими ветками), что делать?
Используем команду git rebase
. Эта команда переносит изменения из одной ветки в другую, переписывая историю коммитов в процессе. Например, если вы хотите перенести изменения из ветки kalushko-feature-popover
в ветку kalushko-refactor-pagination
, вы можете выполнить следующие команды:
git checkout kalushko-feature-popover
git rebase kalushko-refactor-pagination
Первая команда git checkout kalushko-feature-popover
переключает вас на ветку kalushko-feature-popover
. Затем команда git rebase kalushko-refactor-pagination
переносит изменения из kalushko-feature-popover
в kalushko-refactor-pagination
.
Необходимые изменения подгрузились в новую рабочую ветку и ты можешь продолжить работу над проектом.