-
1. Почетак
- 1.1 О контроли верзије
- 1.2 Кратка историја програма Гит
- 1.3 Шта је Гит?
- 1.4 Командна линија
- 1.5 Инсталирање програма Гит
- 1.6 Подешавања за први пут
- 1.7 Тражење помоћи
- 1.8 Резиме
-
2. Основе програма Гит
- 2.1 Прављење Гит репозиторијума
- 2.2 Снимање промена над репозиторијумом
- 2.3 Преглед историје комитова
- 2.4 Опозив
- 2.5 Рад са удаљеним репозиторијумима
- 2.6 Означавање
- 2.7 Гит алијаси
- 2.8 Резиме
-
3. Гранање у програму Гит
- 3.1 Укратко о гранању
- 3.2 Основе гранања и спајања
- 3.3 Управљање гранама
- 3.4 Процеси рада са гранањем
- 3.5 Удаљене гране
- 3.6 Ребазирање
- 3.7 Резиме
-
4. Гит на серверу
- 4.1 Протоколи
- 4.2 Постављање програма Гит на сервер
- 4.3 Генерисање јавног SSH кључа
- 4.4 Подешавање сервера
- 4.5 Гит демон
- 4.6 Паметан HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Опције за хостовање које нуде трећа лица
- 4.10 Резиме
-
5. Дистрибуирани Гит
-
6. GitHub
-
7. Гит алати
- 7.1 Избор ревизија
- 7.2 Интерактивно стејџовање
- 7.3 Скривање и чишћење
- 7.4 Потписивање вашег рада
- 7.5 Претрага
- 7.6 Поновно исписивање историје
- 7.7 Демистификовани ресет
- 7.8 Напредно спајање
- 7.9 Rerere
- 7.10 Отклањање грешака са програмом Git
- 7.11 Подмодули
- 7.12 Паковање
- 7.13 Замена
- 7.14 Складиште акредитива
- 7.15 Резиме
-
8. Прилагођавање програма Гит
- 8.1 Конфигурисање програма Гит
- 8.2 Гит атрибути
- 8.3 Гит куке
- 8.4 Пример полисе коју спроводи програм Гит
- 8.5 Резиме
-
9. Гит и остали системи
- 9.1 Гит као клијент
- 9.2 Мигрирање на Гит
- 9.3 Резиме
-
10. Гит изнутра
- 10.1 Водовод и порцелан
- 10.2 Гит објекти
- 10.3 Гит референце
- 10.4 Pack фајлови
- 10.5 Рефспек
- 10.6 Протоколи за пренос
- 10.7 Одржавање и опоравак податак
- 10.8 Променљиве окружења
- 10.9 Резиме
-
A1. Додатак А: Програм Гит у другим окружењима
- A1.1 Графички интерфејси
- A1.2 Гит у Visual Studio
- A1.3 Гит у Visual Studio Code
- A1.4 Гит у IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Гит у Sublime Text
- A1.6 Гит унутар Bash
- A1.7 Гит у Zsh
- A1.8 Гит у Powershell
- A1.9 Резиме
-
A2. Додатак Б: Уграђивање програма Гит у ваше апликације
- A2.1 Гит из командне линије
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Додатак В: Гит команде
- A3.1 Подешавање и конфигурација
- A3.2 Набављање и креирање пројеката
- A3.3 Основно снимање
- A3.4 Гранање и спајање
- A3.5 Дељење и ажурирање пројеката
- A3.6 Инспекција и поређење
- A3.7 Отклањање грешака
- A3.8 Крпљење
- A3.9 Имејл
- A3.10 Спољни системи
- A3.11 Администрација
- A3.12 Водоводне команде
3.3 Гранање у програму Гит - Управљање гранама
Управљање гранама
Сада када сте направили, спојили и обрисали неке гране, хајде да погледамо неке алате за управљање гранама који ће вам бити од користи када почнете редовно да користите гране.
Поред тога што може да ствара и брише гране, команда 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 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
, као што то наводи корисна` порука.
Савет
|
Опције које су описане изнад, Увек можете да наведете додатни аргумент којим питате за стање спајања у односу на неку другу грану без потребе да је прво одјављујете, као у случају питања шта није спојено у
|
Промена имена гране
Опрез
|
Немојте да мењате име гранама које још увек користе остали сарадници. Не мењајте име грани као што је 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
Сада је погрешно име гране потпуно замењено исправним именом.
Промена имена master гране
Упозорење
|
Променом имена гране као што је master/main/mainline/default престају да раде интеграције, сервиси, помоћи алати и скрипте за изградњу/објављивање које користи ваш репозиторијум. Пре него што то урадите, обавезно се консултујте са својим сарадницима. Такође, будите сигурни да сте обавили детаљну претрагу свог репозиторијума и ажурирали у коду и скриптама евентуалне референце на старо име гране. |
Следећом командом мењате име локалној 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
грану као базу за свој рад, све док ви не урадите још неке промене.
Сада се пред вама налази још неколико задатака пре него што довршите транзицију:
-
Сваки пројекат који зависи од овог ће морати да ажурира свој кôд и/или конфигурацију.
-
Ажурирање свих конфигурационих фајлова за покретач тестова (ако постоје).
-
Дотеривање скрипти за изградњу и објављивање.
-
Преусмеравање подешавања вашег хоста репозиторијума ствари као што су подразумевана грана репозиторијума, правила спајања и све остало што зависи од имена грана.
-
Ажурирање референци на старе гране у документацији.
-
Затварање или спајање захтева за повлачење који циљају стару грана (ако постоје).
Када завршите све ове задатке и уверите се да main
грана функционише исто као и master
грана, безбедно ћете моћи да обришете master
грану:
$ git push origin --delete master