Местное отделение является филиалом , что только вы (локальный пользователь) может видеть. Он существует только на вашей локальной машине.
git branch myNewBranch # Create local branch named "myNewBranch"
Удаленный филиал находится филиал на удаленном месте (в большинстве случаев origin
). Вы можете отправить недавно созданную локальную ветку myNewBranch
в origin
. Теперь другие пользователи могут отслеживать это.
git push -u origin myNewBranch # Pushes your newly created local branch "myNewBranch"
# to the remote "origin".
# So now a new branch named "myNewBranch" is
# created on the remote machine named "origin"
Удаленное отслеживание филиал является локальной копией удаленного филиала. Когда myNewBranch
выталкивается с origin
помощью команды выше, удаленный филиал отслеживания имени origin/myNewBranch
создается на вашей машине. Этот пульт слежения филиал отслеживает удаленный филиал myNewBranch
на origin
. Вы можете обновить удаленную ветку отслеживания , чтобы быть в синхронизации с удаленным филиалом с помощью git fetch
или git pull
.
git pull origin myNewBranch # Pulls new commits from branch "myNewBranch"
# on remote "origin" into remote tracking
# branch on your machine "origin/myNewBranch".
# Here "origin/myNewBranch" is your copy of
# "myNewBranch" on "origin"
Местное отделение слежения является местным филиалом , который отслеживает другую ветвь. Это сделано для того, чтобы вы могли выдвигать / извлекать коммиты в / из другой ветви. Локальные отслеживающие ветви в большинстве случаев отслеживают удаленные отслеживающие ветви. Когда вы нажимаете местную ветвь , origin
используя git push command
с -u
опцией (как показано выше), вы создали местное отделение , myNewBranch
чтобы отслеживать ветку удаленного отслеживания origin/myNewBranch
. Это необходимо для использования git push
иgit pull
без указания восходящего потока, к которому нужно подтолкнуть или вытащить.
git checkout myNewBranch # Switch to myNewBranch
git pull # Updates remote tracking branch "origin/myNewBranch"
# to be in sync with the remote branch "myNewBranch"
# on "origin".
# Pulls these new commits from "origin/myNewBranch"
# to local branch "myNewBranch which you just switched to.
Вот длинный ответ.
Remotes:
Если вы используете Git для совместной работы, вам, вероятно, потребуется синхронизировать ваши коммиты с другими машинами или местами. В терминах Git каждая машина или место называется удаленным , и у каждого может быть одна или несколько веток. Чаще всего у вас будет только один, названный
origin
. Чтобы получить список всех пультов, запуститеgit remote
:Вы можете увидеть, для каких мест эти удаленные имена являются ярлыками, запустив
git remote -v
:Каждый пульт имеет каталог под
git/refs/remotes/
:Филиалы на вашей машине:
TLDR: на вашем локальном компьютере у вас есть три типа ветвей: локальные ветви без отслеживания, локальные ветви отслеживания и ветви удаленного отслеживания. На удаленной машине у вас есть только один тип ветви.
1. Местные отделения
Вы можете просмотреть список всех локальных филиалов на вашем компьютере, выполнив
git branch
:Каждая локальная ветвь имеет файл под
.git/refs/heads/
:На вашем компьютере есть два типа локальных филиалов: не отслеживание локальных филиалов и отслеживание локальных филиалов.
1.1 Не отслеживание местных филиалов
Не отслеживающие локальные филиалы не связаны ни с каким другим филиалом. Вы создаете один, запустив
git branch <branchname>
.1.2. Отслеживание местных филиалов
Отслеживающие локальные ветви связаны с другой ветвью, обычно веткой удаленного отслеживания. Вы создаете один, запустив
git branch --track <branchname> [<start-point>]
.Вы можете просмотреть, какие из ваших местных отделений отслеживают филиалы, используя
git branch -vv
:Из результатов этой команды видно, что локальная ветвь
master
отслеживает ветку удаленного отслеживанияorigin/master
, а локальная ветвьnew-feature
ничего не отслеживает.Другой способ увидеть, какие ветви отслеживают ветви, - это посмотреть
.git/config
.Отслеживание местных филиалов полезно. Они позволяют запускать
git pull
иgit push
без указания, какую ветвь использовать. Если ветвь не настроена для отслеживания другой ветки, вы получите ошибку, подобную этой:2. Удаленное отслеживание веток (все еще на вашем компьютере)
Вы можете просмотреть список всех веток удаленного отслеживания на вашем компьютере, выполнив
git branch -r
:Каждая ветка удаленного отслеживания имеет файл под
.git/refs/<remote>/
:Думайте о ветвях удаленного отслеживания как о локальном кеше для того, что содержат удаленные машины. Вы можете обновить свои ветки удаленного отслеживания, используя
git fetch
, чтоgit pull
используется за кулисами.Несмотря на то, что все данные для ветки удаленного отслеживания хранятся локально на вашем компьютере (например, в кеше), они все равно никогда не называются локальными ветвями. (По крайней мере, я бы так не назвал!) Это просто называется веткой удаленного отслеживания.
Филиалы на удаленной машине:
Вы можете просмотреть все удаленные ветви (то есть ветви на удаленной машине), выполнив
git remote show <remote>
:Эта
git remote
команда запрашивает удаленную машину по сети о ее ветвях. Он не обновляет ветки удаленного отслеживания на вашем локальном компьютере, использоватьgit fetch
илиgit pull
для этого.Из вывода вы можете увидеть все ветви, которые существуют на удаленном компьютере, посмотрев под заголовком «Удаленные ветви» (игнорируйте линии, помеченные как «устаревшие»).
Если бы вы могли войти на удаленный компьютер и найти хранилище в файловой системе, вы могли бы взглянуть на все его ветви в разделе
refs/heads/
.Шпаргалка:
Чтобы удалить локальное отделение, будь то отслеживание или отсутствие отслеживания, безопасно:
Чтобы удалить локальную ветвь, будь то отслеживание или отсутствие отслеживания, принудительно:
Чтобы удалить ветку удаленного отслеживания:
Чтобы создать новую локальную не отслеживающую ветвь:
Чтобы создать новую локальную ветвь отслеживания: (Обратите внимание, что если
<start-point>
указано и является веткой удаленного отслеживанияorigin/foobar
,--track
флаг включается автоматически)Пример:
Чтобы удалить ветку на удаленной машине:
Чтобы удалить все устаревшие ветви удаленного отслеживания, то есть там, где соответствующие ветви на удаленном компьютере больше не существуют:
Вы , возможно, заметили , что в некоторых командах, можно использовать
<remote>/<branch>
и другие команды,<remote> <branch>
. Примеры:git branch origin/hello-kitty
аgit push --delete origin hello-kitty
.Это может показаться произвольным, но есть простой способ запомнить, когда использовать косую черту, а когда использовать пробел. Когда вы используете косую черту, вы имеете в виду ветку удаленного отслеживания на своем компьютере, тогда как при использовании пробела вы фактически имеете дело с веткой на удаленном компьютере по сети.
источник
Местное отделение:
Ветвь на вашей машине, в которой вы можете работать и добавлять коммиты. Вы можете перечислить эти ветви с
git branch
.Местное отделение (с отслеживанием):
Обычный локальный филиал, настроенный для соответствия удаленному филиалу. Это дает такие преимущества, как возможность
git pull
иgit push
без необходимости указывать имя хранилища и ветки. Отслеживание также заставляетgit status
вас сообщать, когда ваша ветка впереди или позади пульта.Удаленная ветка:
Просто ветка в удаленном хранилище - обычно на сервере, таком как GitHub и т. Д.
Отдел удаленного отслеживания:
Локальная копия удаленной ветки. Эта ветка никогда не должна редактироваться. Его целью является отслеживание текущего состояния удаленной ветви. Ветви удаленного отслеживания можно просмотреть
git branch -r
и, как правило, выглядеть примерно такorigin/master
(имя репо с косой чертой и именем ветки). Запускgit fetch
обновит удаленные ветви отслеживания, чтобы отразить состояние соответствующих удаленных ветвей.git branch -avv
мой личный фаворит для отображения краткого обзора того, какие ветви находятся на моей машине, какие ветви находятся на удаленном компьютере, а также последних изменений в каждой. В-a
части указано, что должны отображаться все ветви (удаленные и локальные). Вv
«s на конце подставке для многословных (это показывает последний коммит хэш и сообщение). Спасибо @Flimm за указание, что второйv
добавляет информацию о том, какая локальная ветвь отслеживает, какой удаленный.источник