-
1. Начало
- 1.1 За Version Control системите
- 1.2 Кратка история на Git
- 1.3 Какво е Git
- 1.4 Конзолата на Git
- 1.5 Инсталиране на Git
- 1.6 Първоначална настройка на Git
- 1.7 Помощна информация в Git
- 1.8 Обобщение
-
2. Основи на Git
-
3. Клонове в Git
-
4. GitHub
-
5. Git инструменти
- 5.1 Избор на къмити
- 5.2 Интерактивно индексиране
- 5.3 Stashing и Cleaning
- 5.4 Подписване на вашата работа
- 5.5 Търсене
- 5.6 Манипулация на историята
- 5.7 Мистерията на командата Reset
- 5.8 Сливане за напреднали
- 5.9 Rerere
- 5.10 Дебъгване с Git
- 5.11 Подмодули
- 5.12 Пакети в Git (Bundling)
- 5.13 Заместване
- 5.14 Credential Storage система
- 5.15 Обобщение
-
6. Настройване на Git
- 6.1 Git конфигурации
- 6.2 Git атрибути
- 6.3 Git Hooks
- 6.4 Примерна Git-Enforced политика
- 6.5 Обобщение
-
7. Git и други системи
- 7.1 Git като клиент
- 7.2 Миграция към Git
- 7.3 Обобщение
-
8. Git на ниско ниво
- 8.1 Plumbing и Porcelain команди
- 8.2 Git обекти
- 8.3 Git референции
- 8.4 Packfiles
- 8.5 Refspec спецификации
- 8.6 Транспортни протоколи
- 8.7 Поддръжка и възстановяване на данни
- 8.8 Environment променливи
- 8.9 Обобщение
-
9. Приложение A: Git в други среди
-
10. Приложение B: Вграждане на Git в приложения
- 10.1 Git от команден ред
- 10.2 Libgit2
- 10.3 JGit
- 10.4 go-git
- 10.5 Dulwich
-
A1. Приложение C: Git команди
- A1.1 Настройки и конфигурация
- A1.2 Издърпване и създаване на проекти
- A1.3 Snapshotting
- A1.4 Клонове и сливане
- A1.5 Споделяне и обновяване на проекти
- A1.6 Инспекция и сравнение
- A1.7 Дебъгване
- A1.8 Patching
- A1.9 Email команди
- A1.10 Външни системи
- A1.11 Административни команди
- A1.12 Plumbing команди
3.3 Клонове в Git - Управление на клонове
Управление на клонове
След като създадохме, сляхме и изтрихме няколко разклонения код, нека разгледаме някои инструменти, които ще бъдат от полза, когато започнете да ползвате разклоненията постоянно.
Командата git branch
може да прави повече от създаване или изтриване на клонове.
Ако я пуснете без аргументи, ще получите прост списък на наличните клонове код:
$ git branch
iss53
* master
testing
Звездичката преди името на клона означава, че той е текущо активния в момента (клонът към който сочи 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 readme
Полезните опции --merged
и --no-merged
могат да филтрират списъка до клоновете, които сте слели или все още не сте слели с текущия клон.
За да видите кои клонове сте слели, изпълнете git branch --merged
:
$ git branch --merged
iss53
* master
Понеже вече сляхте iss53
по-рано, можете да го видите в списъка.
Клоновете в този списък, които нямат звездичка пред името си могат безопасно да бъдат изтрити с 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'.
Ако все пак искате да изтриете клона заедно с промените по него, можете да форсирате изтриването с параметъра D
, както подсказва съобщението.
Подсказка
|
Ако не сте посочили даден къмит или име на клон като аргументи, то опциите Можете винаги да подадете допълнителен параметър за да попитате за merge статуса по отношение на друг клон без първо да превключате към него, например - какво не е слято в
|
Преименуване на клон
Внимание
|
Не преименувайте клонове, които все още се ползват от други сътрудници. Не преименувайте клонове като master/main/mainline без да сте прочели секцията "Преименуване на master клон". |
Да кажем, че имате клон с име bad-branch-name
и искате да го смените на corrected-branch-name
, запазвайки цялата история.
Искате също така да смените името на клона и в отдалечените хранилища (GitHub, GitLab или друг сървър).
Как се прави това?
Преименувайте клона локално с командата git branch --move
:
$ git branch --move bad-branch-name corrected-branch-name
Това променя името от bad-branch-name
на corrected-branch-name
, но промяната е само локална засега.
За да го направите видим за колегите, изпратете го към сървъра така:
$ git push --set-upstream origin corrected-branch-name
Да видим къде сме сега:
$ git branch --all
* corrected-branch-name
main
remotes/origin/bad-branch-name
remotes/origin/corrected-branch-name
remotes/origin/main
Отбележете, че сте в клона corrected-branch-name
и той е наличен на сървъра.
Но предишния клон също е там и можете да го изтриете така:
$ git push origin --delete bad-branch-name
Сега bad branch name е напълно заменен с corrected branch name.
Смяна на името на master клона
Внимание
|
Смяната на имената на клонове като master/main/mainline/default ще счупи интеграциите, услугите, помощните инструменти и build/release скриптовете, които вашето хранилище ползва. Преди да го направите, уверете се, че сте се консултирали с колегите си. Също така, проверете внимателно хранилището и се уверете, че сте коригирали всички референции към старото име на клона в кода и скриптовете ви. |
Преименувайте локалния master клон на main с командата:
$ git branch --move master main
Сега локално няма master
клон, понеже той е преименуван на main
.
За да могат и другите да видят това, трябва да изпратите новия main
клон към сървъра.
Така той става видим за колегите ви.
$ git push --set-upstream origin main
Сега клоновете изглеждата така:
$ git branch --all
* main
remotes/origin/HEAD -> origin/master
remotes/origin/main
remotes/origin/master
Сега локалният master
клон го няма и е заменен с main
.
Клонът main
е също така наличен на сървъра.
Сървърът обаче все още има master
клон.
Сътрудниците ще продължат да ползват master
клона като база за своята работа, докато не направите следващи промени.
Сега имате още малко задачи преди да завършите промяната:
-
Всички проекти, които зависят от този, ще трябва да обновят кода и конфигурациите си.
-
Обновяване на всички test-runner конфигурционни файлове.
-
Корекция на build и release скриптовете.
-
Корекция на настройките на хоста на хранилището за неща като клон по подразбиране, правила за сливане и други подобни, които имат отношение към именуването на клоновете.
-
Обновяване на обръщенията към стария клон в документацията.
-
Затваряне или сливане на всички pull requests, насочени към стария клон.
След всико това, и след като се уверите, че main
клонът функционира точно като master
клона, можете да изтриете master
от сървъра:
$ git push origin --delete master