У 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.