Git
разветвление
Поиск…
Синтаксис
-
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
-
git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
-
git branch --unset-upstream [<branchname>]
-
git branch (-m | -M) [<oldbranch>] <newbranch>
-
git branch (-d | -D) [-r] <branchname>…
-
git branch --edit-description [<branchname>]
-
git branch [--color[=<when>] | --no-color] [-r | -a] [--list] [-v [--abbrev=<length> | --no-abbrev]] [--column[=<options>] | --no-column] [(--merged | --no-merged | --contains) [<commit>]] [--sort=<key>] [--points-at <object>] [<pattern>…]
параметры
параметр | подробности |
---|---|
-d, --delete | Удалите ветвь. Филиал должен быть полностью объединен в своей восходящей ветке или в HEAD если не было установлено --track с помощью --track или --set-upstream |
-D | Ярлык для --delete --force |
-m, --move | Переместить / переименовать ветку и соответствующий рефлог |
-М | Ярлык для --move --force |
-r, --remotes | Список или удалить (если используется с -d) ветви удаленного отслеживания |
-a, --все | Список ветвей удаленного отслеживания и локальных ветвей |
--список | Активируйте режим списка. git branch <pattern> попытается создать ветвь, используйте git branch --list <pattern> чтобы git branch --list <pattern> соответствующие ветви |
--set-вверх по течению | Если указанная ветвь еще не существует или если --force был указан, действует точно так же, как --track . В противном случае настройка конфигурации, например, --track, будет возникать при создании ветки, за исключением того, что точки ветвления не изменяются |
замечания
Каждый репозиторий git имеет одну или несколько ветвей . Ветвь является именованной ссылкой на HEAD
последовательности коммитов.
Git repo имеет текущую ветвь (обозначенную *
в списке названий ветвей, напечатанной командой git branch
). Всякий раз, когда вы создаете новую фиксацию с помощью команды git commit
, ваша новая фиксация становится HEAD
текущей ветви и предыдущий HEAD становится родителем нового коммита.
Новая ветвь будет иметь тот же HEAD
что и ветвь, из которой она была создана, пока что-то не будет привязано к новой ветке.
Листинговые ветки
Git предоставляет несколько команд для перечисления филиалов. Все команды используют функцию git branch
, которая предоставит список определенных ветвей, в зависимости от того, какие параметры помещаются в командной строке. Git, если возможно, укажет текущую выбранную ветку со звездой рядом с ней.
Цель | команда |
---|---|
Список местных филиалов | git branch |
Список локальных филиалов verbose | git branch -v |
Список удаленных и локальных филиалов | git branch -a ИЛИ git branch --all |
Список удаленных и локальных ветвей (verbose) | git branch -av |
Список удаленных филиалов | git branch -r |
Список удаленных филиалов с последней фиксацией | git branch -rv |
Список объединенных филиалов | git branch --merged |
Перечислить несвязанные ветви | git branch --no-merged |
Список ветвей, содержащих фиксацию | git branch --contains [<commit>] |
Примечания :
- Добавление дополнительного
v
в-v
например,$ git branch -avv
или$ git branch -vv
также напечатает имя ветви вверх по течению. - Филиалы, показанные красным цветом, являются удаленными ветвями
Создание и проверка новых ветвей
Чтобы создать новую ветку, оставаясь в текущей ветке, используйте:
git branch <name>
Как правило, имя филиала не должно содержать пробелов и подлежит другим спецификациям, перечисленным здесь . Чтобы перейти к существующей ветке:
git checkout <name>
Чтобы создать новую ветку и переключиться на нее:
git checkout -b <name>
Чтобы создать ветвь в точке, отличной от последней фиксации текущей ветви (также известной как HEAD), используйте одну из следующих команд:
git branch <name> [<start-point>]
git checkout -b <name> [<start-point>]
<start-point>
может быть любой версией, известной git (например, другое имя ветки, commit SHA или символическая ссылка, такая как HEAD или имя тега):
git checkout -b <name> some_other_branch
git checkout -b <name> af295
git checkout -b <name> HEAD~5
git checkout -b <name> v1.0.5
Чтобы создать ветку из удаленной ветви (по умолчанию <remote_name>
есть начало):
git branch <name> <remote_name>/<branch_name>
git checkout -b <name> <remote_name>/<branch_name>
Если заданное имя филиала найдено только на одном пульте, вы можете просто использовать
git checkout -b <branch_name>
что эквивалентно
git checkout -b <branch_name> <remote_name>/<branch_name>
Иногда вам может потребоваться переместить несколько ваших недавних коммитов в новую ветку. Это может быть достигнуто путем ветвления и «откидывания назад», например:
git branch <new_name>
git reset --hard HEAD~2 # Go back 2 commits, you will lose uncommitted work.
git checkout <new_name>
Вот иллюстративное объяснение этого метода:
Initial state After git branch <new_name> After git reset --hard HEAD~2
newBranch newBranch
↓ ↓
A-B-C-D-E (HEAD) A-B-C-D-E (HEAD) A-B-C-D-E (HEAD)
↑ ↑ ↑
master master master
Удалять ветвь локально
$ git branch -d dev
Удаляет ветвь с именем dev
если ее изменения объединены с другой ветвью и не будут потеряны. Если ветвь dev
содержит изменения, которые еще не были объединены, которые будут потеряны, git branch -d
завершится с ошибкой:
$ git branch -d dev
error: The branch 'dev' is not fully merged.
If you are sure you want to delete it, run 'git branch -D dev'.
За предупреждающее сообщение вы можете принудительно удалить ветвь (и потерять любые несвязанные изменения в этой ветке) с помощью флага -D
:
$ git branch -D dev
Проверьте новую ветку, отслеживающую удаленную ветку
Существует три способа создания новой feature
ветвления, которая отслеживает origin/feature
удаленного филиала:
-
git checkout --track -b feature origin/feature
, -
git checkout -t origin/feature
, -
git checkout feature
- при условии, что нет локальной веткиfeature
и есть только один пульт с ветвьюfeature
.
Чтобы настроить восходящий поток для отслеживания удаленного типа ветви:
-
git branch --set-upstream-to=<remote>/<branch> <branch>
-
git branch -u <remote>/<branch> <branch>
где:
-
<remote>
может быть:origin
,develop
или созданный пользователем, -
<branch>
-<branch>
пользователя для отслеживания на удаленном компьютере.
Чтобы проверить, какие удаленные отделения отслеживают ваши локальные филиалы:
-
git branch -vv
Переименовать ветвь
Переименуйте выделенную ветку:
git branch -m new_branch_name
Переименовать другую ветку:
git branch -m branch_you_want_to_rename new_branch_name
Перезаписать одиночный файл в текущем рабочем каталоге с тем же именем из другой ветви
Выбранный файл перезапишет еще не внесенные изменения, которые вы сделали в этом файле.
Эта команда проверит файл file.example
(который находится в path/to/
каталога path/to/
) и перезапишет любые изменения, которые вы могли бы внести в этот файл.
git checkout some-branch path/to/file
some-branch
может быть любым tree-ish
известным git (см. Редактирование выбора и gitrevisions для получения дополнительной информации)
Вы должны добавить --
до пути, если ваш файл может быть ошибочно принят за файл (необязательно в противном случае). После --
.
git checkout some-branch -- some-file
Второй some-file
- это файл в этом примере.
Удаление удаленной ветви
Чтобы удалить ветку на origin
удаленном хранилище, вы можете использовать для Git версии 1.5.0 и новее
git push origin :<branchName>
и с версии Git версии 1.7.0 вы можете удалить удаленную ветку, используя
git push origin --delete <branchName>
Чтобы удалить локальную ветвь удаленного отслеживания:
git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # Shorter
git fetch <remote> --prune # Delete multiple obsolete tracking branches
git fetch <remote> -p # Shorter
Чтобы удалить ветвь локально. Обратите внимание, что это не приведет к удалению ветки, если она имеет любые несанкционированные изменения:
git branch -d <branchName>
Чтобы удалить ветвь, даже если она имеет несвязанные изменения:
git branch -D <branchName>
Создайте сиротскую ветвь (т.е. ветвь без фиксации родителя)
git checkout --orphan new-orphan-branch
Первая фиксация, сделанная в этой новой ветке, не будет иметь родителей, и она станет корнем новой истории, полностью отключенной от всех других ветвей и совершит.
Вставить ветку в удаленный
Используйте, чтобы нажимать фиксации, сделанные на вашей локальной ветке, в удаленный репозиторий.
Команда git push
принимает два аргумента:
- Удаленное имя, например,
origin
- Название ветки, например,
master
Например:
git push <REMOTENAME> <BRANCHNAME>
Например, вы обычно запускаете git push origin master
чтобы перенаправить локальные изменения в свой онлайн-репозиторий.
Использование -u
(short для --set-upstream
) будет настраивать информацию отслеживания во время нажатия.
git push -u <REMOTENAME> <BRANCHNAME>
По умолчанию git
помещает локальную ветвь в удаленную ветку с тем же именем. Например, если у вас есть локальная new-feature
, если вы нажмете локальную ветвь, она также создаст new-feature
ветвь. Если вы хотите использовать другое имя для удаленного филиала, добавьте имя удаленного после имени локального филиала, отделенных :
:
git push <REMOTENAME> <LOCALBRANCHNAME>:<REMOTEBRANCHNAME>
Переместить текущую ветвь HEAD в произвольное
Ветвь - это всего лишь указатель на фиксацию, поэтому вы можете свободно перемещать ее. Чтобы сделать это так, чтобы ветвь aabbcc
на commit aabbcc
, выполните команду
git reset --hard aabbcc
Обратите внимание, что это приведет к перезаписыванию текущей фиксации вашего филиала и, как следствие, всей его истории. Вы можете потерять некоторую работу, выпустив эту команду. Если это так, вы можете использовать reflog для восстановления потерянных коммитов . Рекомендуется выполнить эту команду на новой ветке вместо текущей.
Однако эта команда может быть особенно полезна при перезагрузке или выполнении таких больших изменений истории.
Быстрый переход к предыдущей ветке
Вы можете быстро переключиться на предыдущую ветку, используя
git checkout -
Поиск в филиалах
Чтобы просмотреть локальные ветви, содержащие конкретную фиксацию или тег
git branch --contains <commit>
Список локальных и удаленных филиалов, которые содержат конкретную фиксацию или тег
git branch -a --contains <commit>