Git
Chapters ▾ 2nd Edition

3.3 Галуження в git - Управління гілками

Управління гілками

Тепер, коли ви вже вмієте створювати гілки, зливати їх та видаляти, розгляньмо те, як ними управляти, та на інструменти, які можуть в цьому допомогти.

Команда git branch насправді вміє більше ніж просто створювати та знищувати гілки. Запустіть її без параметрів і ви побачите просто список ваших гілок:

$ git branch
  iss53
* master
  testing

Зверніть увагу на символ * перед master: це вказівник на вашу поточно вибрану гілку (тобто ту, на котру вказує HEAD). Це означає, що якщо ви зараз захочете зробити коміт, master оновиться вашими новими змінами. Щоб побачити ваші останні коміти - запустіть git branch -v:

$ git branch -v
  iss53   93b412c fix javascript issue
* master  7a98805 Merge branch 'iss53'
  testing 782fd34 add scott to the author list in the readmes

Опції --merged та --no-merged корисні для фільтрування списку гілок залежно від того чи вони були злиті з поточною гілкою. Для списку гілок, що були злиті з поточною гілкою виконайте git branch --merged:

$ git branch --merged
  iss53
* master

Ви бачите iss53 в цьому списку тому, що раніше її злили з master. Взагалі, гілки без * із цього списку можна вже видаляти (за допомогою git branch -d), адже ми вже інтегрували ті зміни, тому не втратимо їх.

Команда git branch --no-merged покаже гілки, які ви не зливали з поточною гілкою:

$ git branch --no-merged
  testing

Тут ви бачите свою іншу гілку. Оскільки дана гілка містить роботу, що не зливалася, спроба видалити її за допомогою git branch -d не буде успішною:

$ git branch -d testing
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'.

Якщо ж ви дійсно впевнені в тому, що гілка вам не потрібна і всі зміни з неї можна втрачати, можна змусити Git це зробити за допомогою параметра -D. Про що Git вам і повідомляв з попередньої спроби.

Tip

Описані вище опції --merged і --no-merged, якщо не надати команді хеш коміту чи назву гілки як аргумент, покажуть, що, відповідно, було чи не було залите до поточної гілки.

Завжди можна додати ще один аргумент, щоб дізнатися про стан злиття відносно якоїсь іншої гілки — немає потреби спочатку на неї переходити. Наприклад, що не було залите до гілки master?

$ git checkout testing
$ git branch --no-merged master
  topicA
  featureB