В Git, в чем разница между источником / мастером и мастером происхождения?

292

Я знаю, origin - это термин для удаленного репозитория, а master - это там ветка.

Я намеренно опускаю здесь «контекст» и надеюсь, что ответ не должен зависеть от контекста. Итак, в командной строке git, в чем разница между origin / master и origin master . Есть ли недвусмысленный способ понять, когда использовать origin / master и когда мне следует использовать origin master ?

Сентил Кумаран
источник

Ответы:

395

Здесь на самом деле три вещи: origin masterэто две разные вещи, и origin/masterэто одна вещь. Всего три вещи.

Две ветви:

  • master это местный филиал
  • origin/masterявляется удаленной ветвью (которая является локальной копией ветки с именем «master» на удаленной станции с именем «origin»)

Один пульт:

  • origin это пульт

Пример: тянуть в два этапа

Поскольку origin/masterэто ветвь, вы можете объединить ее. Вот тяга в два этапа:

Шаг первый, получить masterс пульта origin. masterВетвь на originбудет неправдоподобным и локальная копия будет называться origin/master.

git fetch origin master

Тогда вы сливаетесь origin/masterс master.

git merge origin/master

Затем вы можете отправить свои новые изменения masterобратно в origin:

git push origin master

Больше примеров

Вы можете получить несколько веток по имени ...

git fetch origin master stable oldstable

Вы можете объединить несколько филиалов ...

git merge origin/master hotfix-2275 hotfix-2276 hotfix-2290
Дитрих Эпп
источник
5
Первая часть действительно полезна. Не смог подключить, как больше примеров, особенно слияния, применимо. Спасибо за ответ.
Сентил Кумаран
1
... потому что когда я "git checkout origin / master", я попадаю в отдельное состояние головы. Если у меня действительно есть локальная копия удаленной главной ветки, почему я не могу работать, фиксировать и добавлять к ней? Или, может, я могу, но почему это отстранено?
Stu
3
Вы можете зафиксировать только локальную ветку, поэтому, когда вы проверяете удаленную ветку, вы получаете «отдельную голову». Конечно, это локальная копия удаленной ветви, но это все еще удаленная ветвь. Нет правила, что «мастер» вообще связан с «происхождением / мастером», они могут быть совершенно разными.
Дитрих Эпп
7
@ Jwan622 «origin - это удаленный» ... «origin» - это просто имя, вы можете выбрать любое имя для удаленных, но «origin» - это имя по умолчанию. Удаленный - это хранилище где-то еще. Это может быть GitHub или другой компьютер, или он может быть где-то еще на том же компьютере.
Дитрих Эпп
2
@ Jwan622: «git remote add» - это команда, которая создает новый пульт. «origin» - это имя, которое добавляет пульт. Поскольку «происхождение» - это просто имя, вы можете выбрать другое имя, если хотите. Например, git remote add home my-server:projects/my-projectдобавляет пульт с именем «home». Вы можете обратиться к документации: git-scm.com/docs/git-remote
Дитрих Эпп
17

origin/masterявляется сущностью (поскольку это не физическая ветвь), представляющей состояние masterветки на удаленном компьютере origin.

origin masterэто ветка masterна пульте origin.

Итак, у нас есть эти:

  • origin / master (представление или указатель на удаленную ветку)
  • мастер - ( фактический филиал )
  • <Your_local_branch> ( фактическая ветвь )
  • <Your_local_branch2> ( фактическая ветвь )
  • <Your_local_branch3> ( фактическая ветвь )

Пример (в местном филиале master):

git fetch # get current state of remote repository
git merge origin/master # merge state of remote master branch into local branch
git push origin master # push local branch master to remote branch master
Femaref
источник
24
Это неверно ... origin masterэто не ветка ... на самом деле это две разные вещи, "origin" (удаленный) и "master" (локальная ветвь).
Дитрих Эпп
Состояние удаленной главной ветки, присутствует локально, верно?
Сентил Кумаран
4
да, это неверно, origin/masterэто удаленная главная ветка. Местное отделение - просто мастер.
Аникет Тхакур
5

origin/masterэто удаленная masterветка

Обычно после выполнения операции, git fetch originчтобы принести все изменения с сервера, вы должны выполнить git rebase origin/masterоперацию, чтобы перебазировать ваши изменения и переместить ветку к последнему индексу. Здесь origin/masterимеется в виду удаленная ветвь, потому что вы в основном говорите GIT перебазировать origin/masterветку на текущую ветку.

Вы бы использовали origin masterпри нажатии, например. git push origin masterпросто говорит GIT отправить в удаленный репозиторий локальную masterветку.

Рауль Рене
источник
2
Похоже, это на самом деле ближе всего к тому, что ищет OP - origin masterэто говорит программному обеспечению делать что-то с тем, что находится на «master» в репозитории «origin». origin/masterявляется ссылкой так же, как f3a4d5и HEADесть.
Nemesarial
4

origin - это имя для удаленного URL-адреса git. Ниже может быть много других примеров пультов.

bangalore => bangalore.example.com:project.git

boston => boston.example.com:project.git

что касается origin / master (например, bangalore / master), это указатель на «master» commit на сайте bangalore . Вы видите это в своем клоне.

Возможно, что удаленный бангалор продвинулся с тех пор, как вы сделали «выборку» или «извлечение»

forvaidya
источник
2

Учитывая тот факт, что вы можете переключиться origin/master(хотя и в отключенное состояние), когда сетевой кабель отключен, это должно быть локальное представление masterфилиала в origin.

Мартин
источник
В ответах выше и ниже люди говорят, что origin / master - это удаленная главная ветвь. Ваш ответ отчасти противоречит тому, что они говорят. Пожалуйста, объясните.
Луна Лавгуд