Чем отличается master и origin master в git

В чем разница между origin / master и origin master в Git?

7 ответов

Пример: тянуть за два шага

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

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

Еще примеры

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

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

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

Прежде чем перейти к различию, нам нужно понять, что означает origin в Git.

Теперь это происхождение или источник истины для вашего репозитория может иметь ветки, включая master или development, или вы называете это.

Теперь, взяв происхождение в контексте, мы можем легко понять следующие вещи.

Это обновит мою локальную главную ветку (на моем локальном компьютере), и все изменения будут доступны в удаленной главной ветке (т.е.

Теперь я хотел бы, чтобы мои изменения были объединены с моей локальной главной веткой, как я могу этого добиться?

git merge origin / master

Как мне обновить удаленную главную ветку со всеми локальными изменениями?

git push origin master

Эта команда говорит об отправке всех моих локальных изменений в origin (то есть в репозиторий (https: // github. com / mycode / git-awsomecode.git)) в главную ветку.

Я предлагаю объединить разработку и мастер с этой командой

Источник

Что такое origin / master в git по сравнению с origin master?

Я хотел добавить этот вопрос в качестве комментария к ответу @KevinBallard здесь в чем разница «origin master «против»origin/master», но мой комментарий был длинным.

или, может быть, это такой: origin/master является локальной копией реальной удаленной главной ветви, в которую был извлечен пульт (скопирован, т. е. просто перезаписаны), и мой местный филиал под названием master изменяется только тогда, когда я git merge origin/master (или git rebase … ). То есть: когда я git pull origin master оба мои локальные копии origin/master и master обновление/слился. Конечно предполагая, что в настоящее время я нахожусь в главной ветви (т. е. git checkout master мой последний заказ).

4 ответов

когда вы git pull (что я считаю злом, кто-нибудь еще?), он автоматически делает:

когда вы хотите перебазировать master, вы должны сделать:

экстракт git help pull :

точнее git pull работает git fetch с заданными параметрами и звонки git merge чтобы объединить извлеченные головки ветвей в настоящее бранч

/
именованная ветвь управляется автоматически git.

git fetch автоматическое обновление origin/master локальная ветвь, чтобы указать на последний коммит origin ПДУ master филиала.

если я нахожусь в ветке под названием topic, это можно ли просто написать ГИТ перебазирования мастер вместо git перебазирования происхождения/мастер?

или действительно есть две разные местные главные ветви?

Да, это две разные местные ветви. Они просто обычно указывают на одни и те же коммиты и разделяют общее дерево.

после извлечения git смотрит на вашу конфигурацию и по умолчанию пытается объединить или перебазировать вашу текущую ветку на ветку из origin С тем же именем.

в config вы можете указать, какая локальная ветвь будет перезагружена, на какой удаленной ветви-так что вы можете просто запустить git pull без дополнительных параметров.

отделения просто ссылки на точки фиксации. Теги также являются ссылками для фиксации точек, но ветви отличаются от теги потому что git в определенных ситуациях автоматически обновляет ссылки на ветви, чтобы указать на другую фиксацию. Эти автоматические обновления происходят, скажем, при создании новой точки фиксации ( git commit ), тогда ветка, которая нынешний глава обновляется для ссылки на вновь созданную точку фиксации.

обратите внимание, что локальная ветвь и удаленная ветвь, которая отслеживает, могут иметь разные имена.

также обратите внимание, что вы действительно фиксацию точки что ветка указывает на (вы можете сказать git merge ), а не сам филиал.

Источник

Git для новичков (часть 2)

В прошлой статье, я рассказал, что такое Git, как его установить и выложить свой код на GitHub. Сегодня мы поговорим про работу в команде над одним проектом. И как это устроено в Git.

В данной статье, вся работа с Git будет через командную строку.

Совместная работа

Чем отличается master и origin master в git. Смотреть фото Чем отличается master и origin master в git. Смотреть картинку Чем отличается master и origin master в git. Картинка про Чем отличается master и origin master в git. Фото Чем отличается master и origin master в git

Для того, чтобы создать новую ветку вводим:

Чем отличается master и origin master в git. Смотреть фото Чем отличается master и origin master в git. Смотреть картинку Чем отличается master и origin master в git. Картинка про Чем отличается master и origin master в git. Фото Чем отличается master и origin master в git

Эти команды делают тоже самое, только второй вариант позволяет сразу переключиться в новую ветку. Вносить изменения в новую ветку можно сразу после ее создания.

При создании новой ветки, старайтесь называть ее кратким и ёмким именем. Чтобы сразу было понятно, что именно изменялось по проекту. Если вы используете, какую-нибудь систему для ведения задач, то можете в начале названия ветки указывать ID задачи, чтобы можно было легко найти, на основе какой задачи была создана ветка. Например вот так:

В каждом новом commit следует оставлять коммент и в нем описывать суть изменений.

Переключаться между ветками можно такой командой:

Чем отличается master и origin master в git. Смотреть фото Чем отличается master и origin master в git. Смотреть картинку Чем отличается master и origin master в git. Картинка про Чем отличается master и origin master в git. Фото Чем отличается master и origin master в git

Для того чтобы посмотреть текущее состояние ветки, например, какие файлы добавлены или не добавлены для создания commit, можно выполнить команду:

Теперь все ваши изменения, в ветке master улетели в GitHub. Таким же образом, можно отправить любую другую ветку:

?Совет. Каждый коммит, лучше заливать сразу в удаленный репозиторий. Никто не застрахован, поломки собственного ПК. Поэтому чтобы не потерять все наработки, не забывайте сливать ваши изменения на GitHub.

Как же теперь другой человек получит все ваши изменения?

Для этого вам понадобиться GitHub или любой другой сервис для хранения кода. В прошлой статье я рассказывал как отправить код в GitHub. Сейчас я покажу, как его скопировать обратно себе на компьютер.

Если у вашего друга раньше не было проекта, то ему придется его «клонировать» себе:

Чем отличается master и origin master в git. Смотреть фото Чем отличается master и origin master в git. Смотреть картинку Чем отличается master и origin master в git. Картинка про Чем отличается master и origin master в git. Фото Чем отличается master и origin master в git

? Адрес репозитория на GitHub можно получить, нажав на зеленую кнопку Code

После выполнения команды, в папке где появиться проект и ваш друг сможет с ним работать. Все ветки и их история также подтянуться.

Теперь самое главное

Перед тем, как создавать новый функционал и новую ветку, стоит обновить master на вашем устройстве. Для этого нужно находиться в этой ветке и выполнить следующую команду:

Таким же образом можно актуализировать любую другую ветку, заменив название ветки master на вашу.

Для обновления всех веток сразу, можно использовать такую, команду, но не рекомендую:

Теперь можно создавать новую ветку и кодить.

Какие проблемы могут возникнуть?

Git старается автоматически сливать изменения, однако это не всегда возможно. Иногда возникают конфликты. Например, когда в двух ветках были изменения в одной и той же строчке кода. Если такое произошло, то необходимо разрешить конфликт вручную. Для этого откройте файл там, где этого произошло. Например, вы можете увидеть что-то подобное:

После внесения нужных изменений добавьте ваш файл через git add как измененный и создайте новый commit:

Вспомогательные команды

Просмотреть изменения относительно двух веток можно командой:

Удалить ненужную ветку:

Просмотр историю ветки:

Подсказки по популярным командам:

Практика и вспомогательные инструменты

Для улучшения ваших навыков, в очередной раз оставлю ссылку на полезный тренажер с заданиями.

Так же, для удобства использования в Visual Studio Code, советую поставить это расширение, которое визуализирует ваши ветки и commit, и помогает с ними работать.

Источник

Что такое origin / master в git по сравнению с origin master?

Я хотел добавить этот вопрос в качестве комментария к ответу @KevinBallard здесь Какая разница между «origin master» и «origin / master», но мой комментарий был слишком длинным.

4 ответа

Когда вы делаете git pull (кто-то еще, что я считаю злом?), Он автоматически:

Когда вы хотите переустановить мастер, вы должны сделать:

Выдержка из git help pull :

Точнее, git pull запускает git fetch с заданными параметрами и вызывает git merge для объединения полученных заголовков ветвей. в текущую ветку

Именованная ветка /
автоматически управляется git.

Если я нахожусь в ветке с названием topic, можно ли просто написать git rebase master вместо git rebase origin / master?

Или действительно существуют две разные локальные главные ветки?

Да, это два разных местных филиала. Обычно они указывают на одни и те же коммиты и имеют общее дерево.

После получения git просматривает вашу конфигурацию и по умолчанию пытается объединить или переустановить вашу текущую ветку в ветку из origin с тем же именем.

Кроме того, у вас может быть локальная ветвь для отслеживания удаленной ветки, в этом случае git pull просто удобен для следующих двух операций: git fetch; git merge origin/.

Обратите внимание, что локальная ветвь и удаленная ветка, которая отслеживает, могут иметь разные имена.

Источник

Удачная модель ветвления для Git

В этой статье я представляю модель разработки, которую использую для всех моих проектов (как рабочих, так и частных) уже в течение года, и которая показала себя с хорошей стороны. Я давно собирался написать о ней, но до сих пор не находил свободного времени. Не буду рассказывать обо всех деталях проекта, коснусь лишь стратегии ветвления и управления релизами.

Чем отличается master и origin master в git. Смотреть фото Чем отличается master и origin master в git. Смотреть картинку Чем отличается master и origin master в git. Картинка про Чем отличается master и origin master в git. Фото Чем отличается master и origin master в git

В качестве инструмента управления версиями всего исходного кода она использует Git.

Почему Git?

За полноценным обсуждением всех достоинств и недостатков Git в сравнении с централизованными системами контроля версий обращайтесь к всемирной сети. Там Вы найдёте достаточное количество споров на эту тему. Лично же я, как разработчик, на данный момент предпочитаю Git всем остальным инструментам. Git реально смог изменить отношение разработчиков к процессам слияния и ветвления. В классическом мире CVS/Subversion, из которого я пришёл, ветвление и слияние обычно считаются опасными («опасайтесь конфликтов слияния, они больно кусаются!»), и потому проводятся как можно реже.

Но с Git эти действия становятся исключительно простыми и дешёвыми, и потому на деле они становятся центральными элементами обычного ежедневного рабочего процесса. Просто сравните: в книгах по CVS/Subversion ветвление и слияние обычно рассматриваются в последних главах (для продвинутых пользователей), в то время как в любой книге про Git они бывают упомянуты уже к третьей главе (основы).

Благодаря своей простоте и предсказуемости, ветвление и слияние больше не являются действиями, которых стоит опасаться. Теперь инструменты управления версиями способны помочь в ветвлении и слиянии больше, чем какие-либо другие.

Но хватит говорить об инструментах, давайте перейдём к модели разработки. Модель, которую я хочу представить, — это, по сути, просто набор процедур, которые исполняет каждый член команды, чтобы все вместе могли достичь высокой управляемости процесса разработки.

Децентрализованный, но централизованный

Предлагаемая модель ветвления опирается на конфигурацию проекта, содержащую один центральный «истинный» репозиторий. Замечу, что этот репозиторий только считается центральным (так как Git является DVCS, у него нет такой вещи, как главный репозиторий, на техническом уровне). Мы будем называть этот репозиторий термином origin, т.к. это имя и так знакомо всем пользователям Git.

Чем отличается master и origin master в git. Смотреть фото Чем отличается master и origin master в git. Смотреть картинку Чем отличается master и origin master в git. Картинка про Чем отличается master и origin master в git. Фото Чем отличается master и origin master в git

Каждый разработчик забирает и публикует изменения (pull & push) в origin. Но, помимо централизованных отношений push-pull, каждый разработчик также может забирать изменения от остальных коллег внутри своей микро-команды. Например, этот способ может быть удобен в ситуации, когда двое или более разработчиков работают вместе над большой новой фичей, но не могут издать незавершённую работу в origin раньше времени. На картинке выше изображены подгруппы Алисы и Боба, Алисы и Дэвида, Клэр и Дэвида.

Технически это реализуется несложно: Алиса создаёт удалённую ветку Git под названием bob, которая указывает на репозиторий Боба, а Боб делает то же самое с её репозиторием.

Главные ветви

Мы считаем ветку origin/master главной. То есть, исходный код в ней должен находиться в состоянии production-ready в любой произвольный момент времени.

Ветвь origin/develop мы считаем главной ветвью для разработки. Хранящийся в ней код в любой момент времени должен содержать самые последние изданные изменения, необходимые для следующего релиза. Эту ветку также можно назвать «интеграционной». Она служит источником для сборки автоматических ночных билдов.

Когда исходный код в ветви разработки (develop) достигает стабильного состояния и готов к релизу, все изменения должны быть определённым способом влиты в главную ветвь (master) и помечены тегом с номером релиза. Ниже мы рассмотрим этот процесс в деталях.

Следовательно, каждый раз, когда изменения вливаются в главную ветвь (master), мы по определению получаем новый релиз. Мы стараемся относиться к этому правилу очень строго, так что, в принципе, мы могли бы использовать хуки Git, чтобы автоматически собирать наши продукты и выкладывать их на рабочие сервера при каждом коммите в главную ветвь (master).

Вспомогательные ветви

Помимо главных ветвей master и develop, наша модель разработки содержит некоторое количество типов вспомогательных ветвей, которые используются для распараллеливания разработки между членами команды, для упрощения внедрения нового функционала (features), для подготовки релизов и для быстрого исправления проблем в производственной версии приложения. В отличие от главных ветвей, эти ветви всегда имеют ограниченный срок жизни. Каждая из них в конечном итоге рано или поздно удаляется.

Конечно же, с технической точки зрения, у этих ветвей нет ничего «специфического». Разбиение ветвей на категории существует только с точки зрения того, как они используются. А во всём остальном это старые добрые ветви Git.

Ветви функциональностей (feature branches)

Чем отличается master и origin master в git. Смотреть фото Чем отличается master и origin master в git. Смотреть картинку Чем отличается master и origin master в git. Картинка про Чем отличается master и origin master в git. Фото Чем отличается master и origin master в git
Могут порождаться от: develop
Должны вливаться в: develop
Соглашение о наименовании: всё, за исключением master, develop, release-* или hotfix-*

Ветви функциональностей (feature branches), также называемые иногда тематическими ветвями (topic branches), используются для разработки новых функций, которые должны появиться в текущем или будущем релизах. При начале работы над функциональностью (фичей) может быть ещё неизвестно, в какой именно релиз она будет добавлена. Смысл существования ветви функциональности (feature branch) состоит в том, что она живёт так долго, сколько продолжается разработка данной функциональности (фичи). Когда работа в ветви завершена, последняя вливается обратно в главную ветвь разработки (что означает, что функциональность будет добавлена в грядущий релиз) или же удаляется (в случае неудачного эксперимента).

Ветви функциональностей (feature branches) обычно существуют в репозиториях разработчиков, но не в главном репозитории (origin).

Создание ветви функциональности (feature branch)

При начале работы над новой функциональностью делается ответвление от ветви разработки (develop).

Добавление завершённой функциональности в develop

Завершённая функциональность (фича) вливается обратно в ветвь разработки (develop) и попадает в следующий релиз.

Чем отличается master и origin master в git. Смотреть фото Чем отличается master и origin master в git. Смотреть картинку Чем отличается master и origin master в git. Картинка про Чем отличается master и origin master в git. Фото Чем отличается master и origin master в git

Конечно, такой подход создаёт некоторое дополнительное количество (пустых) объектов коммитов, но получаемая выгода более чем оправдывает подобную цену.

Ветви релизов (release branches)

Могут порождаться от: develop
Должны вливаться в: develop и master
Соглашение о наименовании: release-*

Ветви релизов (release branches) используются для подготовки к выпуску новых версий продукта. Они позволяют расставить финальные точки над i перед выпуском новой версии. Кроме того, в них можно добавлять минорные исправления, а также подготавливать метаданные для очередного релиза (номер версии, дата сборки и т.д.). Когда вся эта работа выносится в ветвь релизов, главная ветвь разработки (develop) очищается для добавления последующих фич (которые войдут в следующий большой релиз).

Новую ветку релиза (release branch) надо порождать в тот момент, когда состояние ветви разработки полностью или почти полностью соответствует требованиям, соответствующим новому релизу. По крайней мере, вся необходимая функциональность, предназначенная к этому релизу, уже влита в ветвь разработки (develop). Функциональность, предназначенная к следующим релизам, может быть и не влита. Даже лучше, если ветки для этих функциональностей подождут, пока текущая ветвь релиза не отпочкуется от ветви разработки (develop).

Очередной релиз получает свой номер версии только в тот момент, когда для него создаётся новая ветвь, но ни в коем случае не раньше. Вплоть до этого момента ветвь разработки содержит изменения для «нового релиза», но пока ветка релиза не отделилась, точно неизвестно, будет ли этот релиз иметь версию 0.3, или 1.0, или какую-то другую. Решение принимается при создании новой ветви релиза и зависит от принятых на проекте правил нумерации версий проекта.

Создание ветви релиза (release branch)

Ветвь релиза создаётся из ветви разработки (develop). Пускай, например, текущий изданный релиз имеет версию 1.1.5, а на подходе новый большой релиз, полный изменений. Ветвь разработки (develop) готова к «следующему релизу», и мы решаем, что этот релиз будет иметь версию 1.2 (а не 1.1.6 или 2.0). В таком случае мы создаём новую ветвь и даём ей имя, соответствующее новой версии проекта:

Мы создали новую ветку, переключились в неё, а затем выставили номер версии (bump version number). В нашем примере bump-version.sh — это вымышленный скрипт, который изменяет некоторые файлы в рабочей копии, записывая в них новую версию. (Разумеется, эти изменения можно внести и вручную; я просто обращаю Ваше внимание на то, что некоторые файлы изменяются.) Затем мы делаем коммит с указанием новой версии проекта.

Эта новая ветвь может существовать ещё некоторое время, до тех пор, пока новый релиз окончательно не будет готов к выпуску. В течение этого времени к этой ветви (а не к develop) могут быть добавлены исправления найденных багов. Но добавление крупных новых изменений в эту ветвь строго запрещено. Они всегда должны вливаться в ветвь разработки (develop) и ждать следующего большого релиза.

Закрытие ветви релиза

Когда мы решаем, что ветвь релиза (release branch) окончательно готова для выпуска, нужно проделать несколько действий. В первую очередь ветвь релиза вливается в главную ветвь (напоминаю, каждый коммит в master — это по определению новый релиз). Далее, этот коммит в master должен быть помечен тегом, чтобы в дальнейшем можно было легко обратиться к любой существовавшей версии продукта. И наконец, изменения, сделанные в ветви релиза (release branch), должны быть добавлены обратно в разработку (ветвь develop), чтобы будущие релизы также содержали внесённые исправления багов.

Первые два шага в Git:

Теперь релиз издан и помечен тегом.

Чтобы сохранить изменения и в последующих релизах, мы должны влить эти изменения обратно в разработку. Делаем это так:

Этот шаг, в принципе, может привести к конфликту слияния (нередко бывает, что причиной конфликта является изменение номера версии проекта). Если это произошло, исправьте их и издайте коммит.

Теперь мы окончательно разделались с веткой релиза. Можно её удалять, потому что она нам больше не понадобится:

Ветви исправлений (hotfix branches)

Чем отличается master и origin master в git. Смотреть фото Чем отличается master и origin master в git. Смотреть картинку Чем отличается master и origin master в git. Картинка про Чем отличается master и origin master в git. Фото Чем отличается master и origin master в git
Могут порождаться от: master
Должны вливаться в: develop и master
Соглашение о наименовании: hotfix-*

Ветви для исправлений (hotfix branches) весьма похожи на ветви релизов (release branches), так как они тоже используются для подготовки новых выпусков продукта, разве лишь незапланированных. Они порождаются необходимостью немедленно исправить нежелательное поведение производственной версии продукта. Когда в производственной версии находится баг, требующий немедленного исправления, из соответствующего данной версии тега главной ветви (master) порождается новая ветвь для работы над исправлением.

Смысл её существования состоит в том, что работа команды над ветвью разработки (develop) может спокойно продолжаться, в то время как кто-то один готовит быстрое исправление производственной версии.

Создание ветви исправлений (hotfix branch)

Ветви исправлений (hotfix branches) создаются из главной (master) ветви. Пускай, например, текущий производственный релиз имеет версию 1.2, и в нём (внезапно!) обнаруживается серьёзный баг. А изменения в ветви разработки (develop) ещё недостаточно стабильны, чтобы их издавать в новый релиз. Но мы можем создать новую ветвь исправлений и начать работать над решением проблемы:

Не забывайте обновлять номер версии после создания ветви!

Теперь можно исправлять баг, а изменения издавать хоть одним коммитом, хоть несколькими.

Закрытие ветви исправлений

Когда баг исправлен, изменения надо влить обратно в главную ветвь (master), а также в ветвь разработки (develop), чтобы гарантировать, что это исправление окажется и в следующем релизе. Это очень похоже на то, как закрывается ветвь релиза (release branch).

Прежде всего надо обновить главную ветвь (master) и пометить новую версию тегом.

Следующим шагом переносим исправление в ветвь разработки (develop).

У этого правила есть одно исключение: если в данный момент существует ветвь релиза (release branch), то ветвь исправления (hotfix branch) должна вливаться в неё, а не в ветвь разработки (develop). В этом случае исправления войдут в ветвь разработки вместе со всей ветвью релиза, когда та будет закрыта. (Хотя, если работа в develop требует немедленного исправления бага и не может ждать, пока будет завершено издание текущего релиза, Вы всё же можете влить исправления (bugfix) в ветвь разработки (develop), и это будет вполне безопасно).

И наконец, удаляем временную ветвь:

Заключение

Хотя в этой модели ветвления совершенно нет ничего принципиально нового, «большая картинка», с которой начинается эта статья, зарекомендовала себя в наших проектах с самой лучшей стороны. Она формирует элегантную мысленную модель, которую легко полностью охватить одним взглядом, и которая позволяет сформировать у команды совместное понимание процессов ветвления и слияния, действующих на проекте.

Высококачественная PDF-версия этой картинки свободна для скачивания здесь. Распечатайте её и повесьте у себя на стену, чтобы к ней можно было обратиться в любой момент.

Прим. переводчика: статья не новая, ссылка на оригинал уже появлялась на хабре. Этот перевод — для тех, кому английский ещё даётся не так легко (а также для моих коллег, среди которых я занимаюсь пропагандой, хехе). Для автоматизации описанных в статье процедур автор создал проект gitflow, который можно найти на github.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *