2017-02-10 31 views
0

Я прошел через некоторые Q &Git 1.9.1: действительно ли origin/master представляет собой локальную копию мастера филиала по происхождению?

In Git, what is the difference between origin/master vs origin master?

Git branching: master vs. origin/master vs. remotes/origin/master

Я познакомился

происхождения/мастер удаленного филиала (который является локальная копия филиала с именем «ведущий» на удаленном объекте с именем «происхождение»)

remotes/origin/master - это ветвь с именем master на удаленном сервере с именем .

Теперь я хочу знать

  • если origin/master является локальная копия, то почему git branch не отображает эту отрасль.
  • может origin/master рассматриваться как любая другая обычная ветка в местных?

Если нет, то у меня проблемы. это то, что я сделал:

Я клонировал репозиторий. Я добавил удаленный let say remoteA (тот же проект в другом репо) и rebase и merge master с веткой dev на remoteA. Я использовал следующую команду для этого (текущая ветвь мастер):

git pull --rebase remoteA/dev 

затем перебазироваться мастер с происхождением/мастером

git rebase origin/master 

тогда я создал другую ветвь от мастера толкнула его в пульт и получила успешно объединена (не может нажать главную ветвь, поскольку она защищена).

Теперь, если я бегу git status это говорит

Ваш филиал и «Происхождение/мастер» разошлись, (использование «мерзавец тянуть», чтобы объединить удаленный филиал в вашей)

когда Я делаю git pull origin master, показывая все конфликты, которые я разрешил во время rebase. И не хотите снова их разрешать. все, что я хочу, это новая копия мастера без повторного клонирования. что я сделал неправильно в этом процессе? как исправить?
PLZ поясните. благодарит за любую помощь.

ответ

1

Если источник/хозяин является локальной копией, то почему ветвь git не отображает эту ветку.

Использование git branchделает показывают местные отделения отслеживания, если вы запустите его так:

git branch -a 

Причина простая ваниль git branch не показывает ветви отслеживания по умолчанию, потому что обычно вы бы не манипулировать этими ветвями напрямую. Это хороший ответ на ваш второй вопрос.

можно происхождения или хозяина обрабатываться как любая другая обычная ветка на местном языке?

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

Вы можете думать о местных ветвях отслеживания как о существовании, в действительности, для удаленной ветви. Конечно, есть предостережение, что сама ветка отслеживания может находиться за тем, что действительно находится на пульте дистанционного управления.

+0

, если я сделаю git reset - hard in origin/master, он изменит только локальную копию. правильно? это не имеет ничего общего с ведущей отраслью при происхождении? – Suraj

+0

Да, эта команда сбросит любую ветвь, на которой вы находитесь (предположительно локальный 'master'), на локальную ветвь отслеживания, которая называется' origin/master'. Он не касается пульта; вам нужно нажать, чтобы это произошло. –

+0

спасибо. вы можете увидеть мой вопрос и сказать мне, что я сделал неправильно, чтобы переустановить мой филиал с удаленной веткой. – Suraj

0

origin/master просто отметьте положение ведущей ветки в удаленном репо. git branch показывают, что ветви существуют в локальном. Если вы хотите найти позицию origin/master, вы можете использовать git log --oneline --decorate --graph --all.

Нет, его нельзя рассматривать как локальную ветку. Даже вы можете также проверить историю origin/master (git log origin/master), или вы можете сравнить diff с локальными ветвями (git diff master origin/master) и т. Д. Но у него все еще есть несколько особенностей с локальной ветвью. Например, вы можете удалить/создать локальные ветви, но вы не можете сделать это для origin/master.

Чтобы исправить ситуацию, которая origin/master является расходились:

Если вы не хотите изменения для главного локального филиала, вы можете использовать:

git checkout <another local branch> 
git branch -D master 
git checkout master 

Если вы хотите изменения для локальный главный ветвь и разрешить конфликт, используя источник/мастер, вы можете использовать:

git checkout master 
git pull -X theirs origin master 
git push origin master 
+0

"git branch -D master" удалит удаленную главную ветку. не так ли? и если он был удален, «git checkout master» не будет работать. – Suraj

+0

'git branch -D master' удаляет локальную ветвь master. 'git checkout master' создаст новую точку локального ветвления для той же фиксации, что и' origin/master'. –