У Git, яка різниця між початком / master проти master master?


290

Я знаю, походження - це термін для віддаленого сховища, а майстер - це відділення.

Я навмисно опускаю "контекст" тут і сподіваюся, що відповідь не повинна залежати від контексту. Отже, у командних рядках git, яка різниця між origin / master та master master . Чи є неоднозначний спосіб зрозуміти, коли слід використовувати origin / master і коли я повинен використовувати master master ?


Відповіді:


392

Тут насправді три речі: 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", я потрапляю у відокремлений головний стан. Якщо у мене справді є локальна копія віддаленої гілки ведучого, чому я не можу працювати над цим і виконувати його та додавати до нього? Або, можливо, я можу, але чому він відокремлений?
— Ст

3
Ви можете скористатися лише місцевим відділенням, тож, перевіряючи віддалену гілку, ви отримуєте "відсторонену голову". Звичайно, це локальна копія віддаленої гілки, але це все ж віддалена гілка. Не існує правила, що "господар" взагалі пов'язаний з "походженням / господарем", вони можуть бути зовсім іншими.
— Дітріх Епп

7
@ Jwan622 "походження є віддаленим" ... "походження" - це лише ім'я, ви можете вибрати будь-яке ім'я для віддалених, але "походження" - це ім'я за замовчуванням. Пульт - сховище десь в іншому місці. Це може бути GitHub або це може бути інший комп'ютер, а може бути ще десь на тому ж комп’ютері.
— Дітріх Епп

2
@ Jwan622: "git remote add" - команда, яка створює новий пульт. "походження" - це ім'я, яке додає пульт. Оскільки "походження" - це лише ім'я, ви можете вибрати інше ім'я, якщо вам подобається. Наприклад, git remote add home my-server:projects/my-projectдодає пульт з назвою "дім". Ви можете звернутися до документації: git-scm.com/docs/git-remote
— Дітріх Епп

16

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

24
Це невірно ... origin masterце не гілка ... це насправді дві окремі речі, "походження" (віддалений) та "господар" (місцева гілка).
— Дітріх Епп

Стан віддаленої ведучої гілки, присутній локально, правда?
— Сентитіл Кумаран

4
так, це невірно, origin/masterце віддалена головна гілка. Місцева філія - ​​просто господар.
— Aniket Thakur

5

origin/masterє віддаленою masterгілкою

Зазвичай, виконавши git fetch originкоманду a, щоб принести всі зміни з сервера, ви зробите це git rebase origin/master, щоб відновити зміни та перемістити гілку до останнього індексу. Тут origin/masterпосилається на віддалену гілку, тому що ви в основному говорите GIT переставити origin/masterгілку на поточну гілку.

Ви б використовували, наприклад, origin masterпри натисканні. git push origin masterпросто повідомляє GIT перенести до віддаленого сховища локальну masterгілку.


2
Це, здається, насправді найближче до того, що шукала ОП, - origin masterце сказати програмному забезпеченню зробити щось із того, що знаходиться на "master" у сховищі "origin". origin/masterє посиланням так само f3a4d5або HEADє.
— Nemesarial

4

походження - це назва віддаленої URL-адреси git. Нижче може бути ще багато прикладів дистанційного керування.

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

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

що стосується origin / master (наприклад, bangalore / master), то це вказівник на "master" здійснювати на сайті bangalore . Ви бачите це у своєму клоні.

Цілком можливо, що віддалений бангалор просунувся, оскільки ви зробили "забирати" або "тягнути"


2

Зважаючи на той факт, що ви можете переключитися на origin/master(хоча й у відірваному стані), відключивши мережевий кабель, це повинно бути місцевим представництвом masterгілки на origin.


У відповідях вище та нижче люди кажуть, що походження / господар є віддаленою гілкою. Ваша відповідь начебто суперечить тому, що вони говорять. Будь ласка, поясніть.
— Луна Лавгуд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.