В 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>записи по мере необходимости. Это тот самый моментfetching, что делает все совпадают (Ну, что, и начальный клон, и некоторые случаиpushing тоже-в основном, когда 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