С git fetch
у вас есть «пульты». Обычный первый пульт - origin
, но может быть и больше.
С git в целом люди имеют ветви.
Удаленный репозиторий обычно представляет собой хранилище git, что означает ... у него есть ветви.
Предположим, вы решили создать новую ветку, которую никто не использует, для вашего собственного использования. Вы ловко назовете это branch
. Увы, теперь у Джо есть такая же идея, и он назвал свою ветку branch
, и он подталкивает ее в хранилище, в котором вы оба делитесь по телефону origin
.
Затем вы запускаете git fetch origin
(или git fetch
таким образом, чтобы он доходил до origin
, то же самое). И ... это приносит Джо branch
.
Что происходит с отрасль?
Ответ: ничего! Это великая вещь в ветвях гитов: ваши местные филиалы - ваши, и ваши в одиночку, и только вы можете повлиять на них.
Но что, если вы хотите использовать «свою» ветку? Ну, когда ваш git консультируется с ними и получает список «своих» филиалов, он переименовывает их. Если вы собираете ветки с origin
, а там один из них называется branch
, git изменяет вашу копию на «удаленную ветку», которую он называет origin/branch
. Если у вас больше пультов, ветвь branch
на пульте дистанционного управления another
будет another/branch
.
Так, origin/cawhatever
является «ваша копия» «филиала cawhatever
», как в последний раз видели на пульте дистанционного управления имени origin
, последний раз, когда ваш мерзавец был шанс пойти туда и посмотреть, что там. Git обновляет их как на fetch
, так и на push
операциях (хотя в старых версиях git, если вы запускаете его так, как это делает git pull
, он подавляет обновления «удаленных ветвей»).
Полная история немного больше: ваши местные филиалы имеют «полное имя», которое начинается с refs/heads/
. Это в основном «каталог» или «папка», полная названий ветвей (и/или подкаталогов с большим количеством имен ветвей). Удаленные ветви живут в пространстве под «справочником» refs/remotes/
. Это гарантирует, что ваши и их никогда не столкнется. Но иногда, когда вы добавляете пульт дистанционного управления, это может случайно иметь то же имя, что и ветка, которую вы создали. (Подумайте, что произойдет, если вы создадите локальную ветвь с именем origin
, например!) В этом случае вы должны указать длинную форму имени (см. gitrevisions).
Теги живут под refs/tags/
.Существует не переименование тегов, встроенных, поэтому, когда вы приносите их теги, они входят в одно и то же пространство имен, что и ваши собственные теги. Это делает использование тегов несколько более деликатным, особенно если вы начинаете говорить с несколькими различными пультами.
По большей части, однако, подумайте о отдаленных ветвях как о «том, что они имели в прошлый раз, когда я проверил». Вы можете иметь свои (локальные) ветви «отслеживать» удаленные ветви, а затем git status
расскажет вам, как далеко «впереди» и/или «сзади» вы, из того, что находится в вашем репозитории, в копии «того, что у них было в последний раз» проверено».
Ого, спасибо за длительное, но понятное описание! – ForgetfulFellow