Теперь, когда вы уже попробовали создавать, объединять и удалять ветки, пора познакомиться с некоторыми приемами управления ветками, которые вам пригодятся, когда вы начнете использовать ветки постоянно.
Для начала воспользуйтесь командной строкой. Команда git branch делает несколько больше, чем просто создает и удаляет ветки. При запуске без параметров вы получите простой список имеющихся у вас веток:
> git branch
issue-53
* main
Обратите внимание на символ *, стоящий перед веткой main: он указывает на ветку, на которой вы находитесь в настоящий момент (т. е. ветку, на которую указывает HEAD). Это означает, что если вы сейчас сделаете коммит, ветка main переместится вперед в соответствии с вашими последними изменениями.
Чтобы посмотреть последний коммит на каждой из веток, выполните команду git
branch -v
:
> git branch -v
issue-53 560a09c Закончил задачу issue-53
* main 1ea5624 Merge branch 'issue-53' разрешил все конфликты
Параметры --merged и --no-merged могут отфильтровать этот список для вывода только тех веток, которые влиты или еще не влиты в текущую ветку.
Чтобы посмотреть те ветки, которые вы уже влили в текущую, можете выполнить команду
git branch --merged
:
> git branch --merged
issue-53
* main
Ветка issue-53 присутствует в этом списке потому что вы ранее
влили ее в main. Те ветки из этого списка, перед которыми нет
символа *, можно смело удалять командой git branch -d
. Наработки из
этих веток уже включены в другую ветку, так что ничего не потеряется.
Чтобы увидеть все ветки, содержащие наработки, которые вы пока еще не влили в текущую
ветку, выполните команду git branch --no-merged
:
>git branch --no-merged
testing
Вы увидите оставшуюся ветку. Так как она содержит еще не влитые наработки, попытка удалить ее командой git branch -d testing приведет к ошибке:
> git branch -d testing
error: the branch 'testing' is not fully merged
hint: If you are sure you want to delete it, run 'git branch -D testing'
hint: Disable this message with "git config advice.forceDeleteBranch false"
Если вы действительно хотите удалить ветку вместе со всеми наработками, используйте параметр -D, как указано в подсказке.
Аналогичный результат будет, если вы захотите удалить такую ветку интерактивной командой . Visual Studio Code покажет вам предупреждающее сообщение. ( )
Таким образом Git страхует вас от случайной потери ваших наработок. Если вы действительно хотите удалить такую ветку и потерять наработки, вы можете нажать Удалить ветвь.
Если в качестве аргумента не указан коммит или ветка, то параметры --merged и --no-merged покажут что уже влито или не влито в вашу текущую ветку соответственно.
Вы всегда можете указать дополнительный аргумент для вывода той же информации, но относительно указанной ветки предварительно не извлекая и не переходя на нее.
Например, если ваша текущая ветка testing, то посмотреть ветки, еще не влитые в основную ветку main, можно следующей командой:
> git branch --no-merged main
topicA
featureB
Предположим, у вас есть ветка с именем ветка-с-плохим-именем, и вы хотите переименовать ее в хорошая-ветка, сохранив при этом всю историю. Вместе с этим, вы также хотите изменить имя ветки на удаленном сервере (GitHub, GitLab или другой сервер). Как это сделать?
Переименуйте ветку локально. Для этого перейдите в эту ветку и нажмите в дополнительном меню репозитория. ( )
В палитре команд введите новое имя ветки и нажмите Ввод.
Ветка ветка-с-плохим-именем будет переименована в хорошая-ветка, но это изменение пока только локальное.
Чтобы все остальные увидели исправленную ветку в удаленном репозитории, отправьте ее туда. Для этого нажмите . ( )
Теперь текущая ветка хорошая-ветка присутствует и на удаленном сервере.
Однако, старая ветка тоже все еще там, но ее можно удалить с помощью командной строки и команды git push:
> git push origin --delete ветка-с-плохим-именем
To https://github.com/1C-EDT-Developer/coldevex
- [deleted] ветка-с-плохим-именем
Теперь старое имя ветки полностью заменено исправленным.
Допустим, вы решили переименовать main в primary:
Ваша локальная ветка main исчезла, так как она заменена веткой primary. Удаленная ветка primary доступна в удаленном репозитории.
Старая удаленная ветка main все еще присутствует в удаленном репозитории. Остальные участники будут продолжать использовать удаленную ветку main в качестве основы для своей работы, пока вы не совершите ряд дополнительных действий.
По материалам книги Pro Git (авторы Scott Chacon и Ben Straub, издательство Apress). Книга распространяется по лицензии Creative Commons Attribution Non Commercial Share Alike 3.0 license.