[git] Работа с ветками - rsajob/docs GitHub Wiki
Связывание веток
Отправить локальную ветку в удалённый репозиторий
git push origin feature # связь между ними не создаётся
git push -u origin feature # -u - привязать локальную ветку к удалённой
Выкачиваем и отслеживаем ветку из удалённого репозитория
git checkout --track origin/feature
git checkout --track -b my-feature origin/_feature # имя локальной ветки делаем my-feature
Cвязать существующую локальную ветку с существующей удаленной:
git branch -u upstream/feature feature
или
git branch --set-upstream feature origin/feature
Создание/Удаление/Редактирование веток
Создать новую ветку и переключится на неё
git branch feature
Переключится на ветку
git checkout feature
Создать новую ветку, переключится на неё и перенести в неё все не закомитеные текущие изменения
Например приступая к работе с новой фичей (или исправляя баг), ответвляемся (щас стоим на мастере)
git checkout -b new_branch
Удаляем ветку
git branch -d feature # В локальном репозитории
git push origin :feature # В удалённом репозитории
Если ветка в удалённом репозитории не удаляется из-за того что она по умолчанию, то нужно в начале переключить удалённый репозиторий на новую ветку, для этого надо в удалённом репозитории сделать (т.е. зайти непосредственно на сервер где лежит удалённый репозиторий):
git symbolic-ref HEAD refs/heads/mybranch
Бывает что в удалёном репозитории ветки удалены а в локальном они продолжают отслеживаться. Если сделать комманду
git remote show origin
то в разделе Remote branches:
могут находится ветки подобно этому
Remote branches:
master tracked
refs/remotes/origin/old_br stale (use 'git remote prune' to remove)
поэтому для удаления этих не актуальных веток нужно сделать
git remote prune origin
При просмотре git br -a
иногда есть такая ветка remotes/origin/HEAD -> origin/master
или чтото подобное. Она появляется обычно после того как сдалть clone
. Я пока толком не разобрался для чего она нужна, её можно удалить так:
git remote set-head origin -d
Комманда для возврата на место remotes/origin/HEAD
git remote set-head origin -a
Переименовать текущую ветку:
git branch -m new_name
git branch -M new_name (-M позволяет проигнорировать, что new_name уже есть, перекрывает её)
Переименовать любой бранч:
git branch -m current_name new_name
Ситуация немного усложняется в случае если вы уже запушили ветку на удаленный сервер, переименовываем ее так:
git checkout -b <new-branch-name>
git push origin <new-branch-name>
git push origin :<old-branch-name>
- создаем новую ветку
- пушим ее на удаленный сервер
- удаляем старую ветку
Слияние
Например нужно слить ветку feature, в которой несколько коммитов в мастер так чтобы это был один коммит в мастере.
git co master
git merge --squash feature
при этом в индекс положаться все изменения которые были сделаны (всё сольётся в кучу) но не будет закоммичено. остаётся всё закоммитить одним коммитом.
Вот реально хорошая статься как ребайсить ветки с удалёнными репозиториями: Git Rebase: руководство по использованию
Работа с индексом
Добавить всё в индекс
git add .
Добавить всё в индекс (даже deleted)
git add -u
Удалить файл из индекса, оставив его при этом в вашем рабочем каталоге.
git rm --cached file_or_dir