Робота з гілками
Last updated
Last updated
список гілок:
Подивитися останні коміти
Створити нову гілку 'iss53' і перейти в неї
Або скорочено:
Правимо файли, тестуємо... Коммітимо:
Коли робота закінчена і перевірена працездатність, перемикаємося на основну гілку і зливаемо зміни:
Якщо гілка 'iss53' більше не потрібна - видаляємо її.
Якщо ми почали робити зміни, а потім зрозуміли, що краще треба було це робити в іншій гілці... або Якщо ми зробили зміни, забувши забрати останні оновлення з сервера... Тобто, є змінені файли в гілці main
. Їх ще не додали для відстеження (під час запуску команди git status
вони підсвічуються червоним).
Переносимо зміни з гілки main
в іншу, наприклад temp
. Створюємо її, та переходимо в неї, додаємо змінені файли для відстеження в цій гілці, комітимо:
На цьому кроці ми в temp
зі збереженими зміненими файлами, а main
- очистилася від змін. Ми можемо продовжити та закінчити роботу в temp
. Можемо повернутися в main
, щоб отримати оновлення з сервера, а потім злити з тими що перенесли в temp
:
Опции --merged
и --no-merged
могут отфильтровать этот список для вывода только тех веток, которые слиты или ещё не слиты в текущую ветку. Чтобы посмотреть те ветки, которые вы уже слили с текущей, можете выполнить команду git branch --merged
:
Ветка iss53
присутствует в этом списке потому что вы ранее слили её в master
. Те ветки из этого списка, перед которыми нет символа *
, можно смело удалять командой git branch -d
; наработки из этих веток уже включены в другую ветку, так что ничего не потеряется.
Чтобы увидеть все ветки, содержащие наработки, которые вы пока ещё не слили в текущую ветку, выполните команду git branch --no-merged
:
Вы увидите оставшуюся ветку. Так как она содержит ещё не слитые наработки, попытка удалить её командой git branch -d
приведёт к ошибке:
Если вы действительно хотите удалить ветку вместе со всеми наработками, используйте опцию -D
, как указано в подсказке.
Подсказка
Если в качестве аргумента не указан коммит или ветка, то опции --merged
и --no-merged
покажут что уже слито или не слито с вашей текущей веткой соответственно.
Вы всегда можете указать дополнительный аргумент для вывода той же информации, но относительно указанной ветки предварительно не извлекая и не переходя на неё.
Внимание
Не переименовывайте ветки, которые всё ещё используются другими участниками. Не переименовывайте ветку в master/main/mainline, не прочитав раздел «Изменение имени главной ветки».
Предположим, у вас есть ветка с именем bad-branch-name
, и вы хотите изменить её на corrected-branch-name
, сохранив при этом всю историю. Вместе с этим, вы также хотите изменить имя ветки на удалённом сервере (GitHub, GitLab или другой сервер). Как это сделать?
Переименуйте ветку локально с помощью команды git branch --move
:
Ветка bad-branch-name
будет переименована в corrected-branch-name
, но это изменение пока только локальное. Чтобы все остальные увидели исправленную ветку в удалённом репозитории, отправьте её туда:
Теперь проверим, где мы сейчас находимся:
Обратите внимание, что текущая ветка corrected-branch-name
, которая также присутствует и на удалённом сервере. Однако, старая ветка всё ещё по-прежнему там, но её можно удалить с помощью команды:
Теперь старое имя ветки полностью заменено исправленным.
Изменение имени главной ветки
Предупреждение
Изменение имени ветки, например master/main/mainline/default, сломает интеграции, службы, вспомогательные утилиты и скрипты сборки, которые использует ваш репозиторий. Прежде чем сделать это, обязательно проконсультируйтесь с коллегами. Также убедитесь, что вы выполнили тщательный поиск в своём репозитории и обновили все ссылки на старое имя ветки в вашем коде или скриптах.
Переименуйте локальную ветку master
в main
с помощью следующей команды:
После этого, локальной ветки master
больше не существует, потому что она была переименована в ветку main
.
Чтобы все остальные могли видеть новую ветку main
, вам нужно отправить её в общий репозиторий. Это делает переименованную ветку доступной в удалённом репозитории.
В итоге, состояние репозитория становится следующим:
Ваша локальная ветка master
исчезла, так как она заменена веткой main
. Ветка main
доступна в удалённом репозитории. Старая ветка master
всё ещё присутствует в удалённом репозитории. Остальные участники будут продолжать использовать ветку master
в качестве основы для своей работы, пока вы не совершите ряд дополнительных действий.
Теперь, для завершения перехода на новую ветку перед вами стоят следующие задачи:
Все проекты, которые зависят от текущего, должны будут обновить свой код и/или конфигурацию.
Обновите конфигурацию всех запускаемых тестов.
Исправьте скрипты сборки и публикации артефактов.
Поправьте настройки репозитория на сервере: задайте новую ветку по умолчанию, обновите правила слияния, а также прочие настройки, которые зависят от имени веток.
Обновите документацию, исправив ссылки, указывающие на старую ветку.
Слейте или отмените запросы на слияние изменений, нацеленные на старую ветку.
После того, как вы выполнили все эти задачи и уверены, что ветка main
работает так же, как ветка master
, вы можете удалить ветку master
:
Объяснение полезных Git команд с помощью визуализации
Merge
Fast-forward (--ff)
No-fast-foward (--no-ff)
Merge конфликты
Rebase
Interactive Rebase Reset
Soft reset
Hard reset
Revert
Cherry-pick
Fetch
Pull
Reflog
(git-scm.com/book 🔗)