В Git ветвления: Мастер и происхождения/мастер и пультов/происхождения/мастер
Я думаю, что я на правильном пути, чтобы понять основные понятия ЖКТ.
Я уже настроил и клонировал удаленный репозиторий. Я также создал пустой репозиторий на стороне сервера и связал с ним свой локальный репозиторий.
моя проблема в том, что я не понимаю разницы между:
- происхождение/Мастер и пультов/происхождения/мастер
насколько я понял, мастер является местным филиалом, и remotes / origin / master дистанционное.
но что же такое origin / master?
6 ответов:
возьмите клон удаленного репозитория и запустите
git branch -a
(чтобы показать все ветви, о которых знает git). Это, вероятно, будет выглядеть примерно так:* master remotes/origin/HEAD -> origin/master remotes/origin/master
здесь
master
- это ветвь в локальном репозитории.remotes/origin/master
это ветка с именемmaster
на пульте под названиемorigin
. Вы можете ссылаться на это какorigin/master
, например:git diff origin/master..master
вы также можете ссылаться на него как
remotes/origin/master
:git diff remotes/origin/master..master
это всего лишь два разных способа обращения к то же самое (кстати, обе эти команды означают "покажите мне изменения между удаленными
master
ветке и мойmaster
филиал).
remotes/origin/HEAD
- этоdefault branch
для пульта дистанционного управления с именемorigin
. Это позволяет вам просто сказатьorigin
вместоorigin/master
.
короткий ответ для чайников вроде меня (украдено у Торека):
- origin / master это "где мастер был там в последний раз, когда я проверял"
- мастер это "где мастер здесь на основе того, что я делал"
технически на самом деле нет никаких" удаленных " вещей вообще1 в вашем git РЕПО есть только местные имена, которые должны соответствуют именам на другом, другом РЕПО. Те, кого зовут
origin/whatever
будет первоначально совпадать с теми, на репо вы клонировали-от:git clone ssh://some.where.out.there/some/path/to/repo # or git://some.where...
создает локальную копию другого РЕПО. По пути он отмечает все ветви, которые были там, и фиксирует те, на которые ссылаются, и вставляет их в свой локальный РЕПО под именами
refs/remotes/origin/
.в зависимости от того, как долго вы идете, прежде чем вы
git fetch
или эквивалент обновления " моя копия того, что есть.где.из.там", они могут менять свои ветви вокруг, создавать новые и удалять некоторые из них. Когда вы делаетеgit fetch
(илиgit pull
который действительно fetch plus merge), ваше РЕПО сделает копии своей новой работы и изменит всеrefs/remotes/origin/<name>
записи по мере необходимости. Это тот самый моментfetch
ing, что делает все совпадают (Ну, что, и начальный клон, и некоторые случаиpush
ing тоже-в основном, когда Git получает возможность проверить-но см. предостережение ниже).Git обычно вы ссылаетесь на свой собственный
refs/heads/<name>
как только<name>
, а удаленные какorigin/<name>
и все это просто работает, потому что очевидно, кто есть кто. Иногда можно создать свои собственные имена ветвей, которые делают это неочевидным, но не беспокойтесь об этом, пока это не произойдет. :- ) Просто дайте Git самое короткое имя, которое делает его очевидным, и он пойдет оттуда:origin/master
это "где мастер был там в последний раз, когда я проверял", иmaster
это "где мастер здесь на основе того, что я делал". Бегиgit fetch
чтобы обновить Git на "где мастер там" по мере необходимости.
предостережение: в версиях Git старше 1.8.4,
git fetch
имеет некоторые режимы, которые не обновляют "где мастер там" (точнее, режимы, которые не обновляют какие-либо ветви удаленного отслеживания). Работаетgit fetch origin
илиgit fetch --all
или даже простоgit fetch
, тут обновление. Работаетgit fetch origin master
не. К сожалению, этот режим "не обновляется" запускается обычнымgit pull
. (Это в основном просто небольшое раздражение и фиксируется в Git 1.8.4 и позже.)
1Ну, есть одна вещь, которая составляет под названием "пульт дистанционного управления". Но это тоже местное! Имя
origin
это то, что Git называет"удаленным". Это в основном просто короткое имя для URL, который вы использовали, когда вы это сделали клон. Это также, гдеorigin
наorigin/master
происходит от. Имяorigin/master
называется a пульт дистанционного отслеживания ветви, который иногда сокращается до" удаленной ветви", особенно в более старой или более неофициальной документации.
одно уточнение (и что меня смутило):
"remotes / origin / HEAD-это ветвь по умолчанию" не совсем правильно.
remotes / origin / master была ветвью по умолчанию в удаленном репозитории (последний раз, когда вы проверяли). Голова - это не ветвь, она просто указывает на ветвь.
думайте о голове как о рабочей зоне. Когда вы думаете об этом таким образом, то "git checkout branchname" имеет смысл в отношении изменения файлов рабочей области, чтобы быть таковым конкретная ветвь. Вы "проверяете" файлы ветвей в свою рабочую область. Голова для всех практических целей-это то, что видно вам в вашей рабочей зоне.
- происхождения - это обычное и наиболее распространенное имя, чтобы указать на remote.
$ git remote add origin https://github.com/git/git.git
--- вы запустите эту команду, чтобы связать свой проект github с origin. Здесь происхождение пользовательские. Вы можете переименовать его по$ git remote rename old-name new-name
- мастер - имя ветви по умолчанию в Git-master. Как для удаленного, так и для локального компьютера.
- origin / master - это просто указатель для ссылки на главную ветвь в удаленном РЕПО. Помните, я сказал, что origin указывает на удаленный.
$ git fetch origin
- загрузка объектов и ссылок из удаленного репозитория на локальный компьютер [origin/master]. Это означает, что он не повлияет на вашу локальную ветку master, если вы объедините их с помощью$ git merge origin/master
. Не забудьте проверить правильную ветку, где вам нужно объединить, прежде чем запускать это командаПримечание: извлеченный контент представлен в виде удаленной ветви. Fetch дает вам возможность просмотреть изменения, прежде чем интегрировать их в свою копию проекта. Чтобы показать изменения между вашим и удаленным
$git diff master..origin/master