вторник, 23 июля 2013 г.

git бранчевание

Список поточных бранчей:
git branch
Или с указанием также на каждый бранеч хеша его последнего комита (HEAD)
git branch -v

Создать новый бранч, из HEAD поточного и переключиться на него:
git branch new_branch_name
git checkout new_branch_name

# или вариант в одну строку
git checkout -b new_branch_name 

Создать новый бранч из указанного, а не поточного
git checkout -b new_branch_name existed_local_branch_name
git checkout -b new_branch_name remote_name/existed_remote_branch_name

Удалить безопасно бранч, гит удалит его только в тому случае, если мы сделали мердж в master
git checkout -d existed_branch_name

Если же мы реально осознали, что работа в указанном бранче реально не должна попасть ни в историю, ни в проект, тогда удаляем силой:
git checkout -D existed_branch_name

Переименовать поточный бранч:
git checkout -m new_name_for_curbranch


Все это делается для того, чтобы мы в конце концов сомогли сделать:
$ git checkout master 
$ git merge already_tested_branch
$ git branch -d already_tested_branch

После этого возможны два варинта событий:
- master:HEAD еще не успел продвинуться дальше, поэтому происходит Fast forward мердж, что означает, что у нас будет ровная история master:HEAD - как буд-то разработка так и велась в master, а не в отдельной ветке.
- уже успели накомитить в master:HEAD, поэтому происходит 3-Way Merge, и при необходимости мы будем решать конфликты, после этого история будет бугристая.

Чтобы было видно бранчевание даже в случае когда не успели накомитить в master, мы можем смерджить со следующим ключом:
$ git merge --no-ff already_tested_branch
$ git branch -d already_tested_branch

Чтобы без сюрпризов и у нас точно не было ненужного ветвеления можем указать так(чаще всего это нужно если мы до этого уже делали --no-ff, или ставили ):
$ git merge --ff-only already_tested_branch

Есчли бранч был создан не только локально но и удаленно, то нужно его удалить удаленно тоже.
Нужно помнить, что когда мы пушим  мы неявно делаем следующее:
$ git push remote local_branch:remote_branch

Но если мы уже удалили локальную бранчу, то так мы сделать не можем потому что ее нет, поэтому мы удаляем удаленную таким образом:
$ git push remote_name :remote_branch
или же алиасом:
$ git push remote_name --delete remote_branch


Связать свою локальную бранчу с удаленной:
$ git branch --set-upstream mymaster origin/master

Комментариев нет:

Отправить комментарий