2012-01-20 3 views
5

Я новичок в git, и я хотел бы знать, как решить очень простой сценарий. Я читал так много сообщений о stackoverflow о git, но до сих пор не могу понять ответ.Как отслеживать происхождение/мастер в моей ветке dev git

У нас есть филиал источника/мастера, на котором все работают. У меня есть функция, которую я хочу реализовать, и может потребоваться время для разработки. Между тем, люди могут проверять код на источник/мастер.

Что бы мой рабочий процесс выглядеть и как я должен идти о создании моей GIT отрасли, учитывая следующие потребности:

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

  2. Я хочу сохранить свою ветку в актуальном состоянии с помощью ведущей ветки.

  3. Я хочу свести к минимуму регулярные слияния. Мне нравится концепция git rebase, поэтому я хотел бы максимизировать ее использование и, следовательно, ускорить слияние.

  4. В какой-то момент нам нужно будет объединить мою ветку FeatureA в начало/мастер.

Сведение:

Как настроить ветвь, которая тянет от происхождения/мастеров, но выталкивает происхождения/MY-ФИЛИАЛ?

Каким будет мой рабочий процесс?

UPDATE:

Спасибо @ воли pragnell! В чем разница между вашим решением и следующим.

Эта страница на GitHub предлагает:

https://github.com/diaspora/diaspora/wiki/Git-Workflow

Для того, чтобы получить последние обновления от ствола развития сделать установку одноразовой установить основную GitHub репо в качестве пульта дистанционного управления, введя:

$ git remote add upstream git://github.com/diaspora/diaspora.git 
$ git fetch upstream 
$ git checkout master 
$ git rebase upstream/master 
$ git checkout 100-retweet-bugfix 

[убедиться, что все совершается по мере необходимости в отрасли]

$ git rebase master 

ответ

5

Возможно, вам не нужна ветка, которая тянет от мастера и нажимает на вашу собственную ветку. То, что вы хотите, - это вытащить из мастера на локальный мастер, обработать локальную локализацию и затем нажать на свою удаленную ветвь для этой функции. Это довольно стандартный рабочий процесс и дает вам полный контроль и минимальное количество слияний.Лично я хотел бы сделать это следующим образом:

Создать новую локальную ветку

git checkout -b myFeature 

Нажмите, что к новой удаленной ветви (см this stackoverflow question, если вам нужно больше информации об этом шаге)

git push origin myFeature 

Теперь вы можете спокойно работать на ветке myFeature, нажав, используя приведенную выше команду, когда вам нужно, не испортив основную ветку. Когда вам нужно раздобыть фиксации, что другие сделали на мастере, вы можете сделать это так:

git checkout master 
git pull (this will just fast-forward if you don't make any local changes to master) 
git checkout myFeature 
git rebase master 

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

git checkout master 
git merge myFeature 
git push origin master 
+0

Спасибо @ will-Pragnell! Мой вопрос обновляется следующим образом: В чем разница между решением ура и следующим. Эта страница на github предлагает: https://github.com/diaspora/diaspora/wiki/Git-Workflow Чтобы получить последние обновления от соединительной линии разработки, выполните одноразовую настройку, чтобы установить основное репо GitHub как пульт дистанционного управление, введя: $ мерзавца удаленного добавить вверх по течению мерзавца: //github.com/diaspora/diaspora.git, $ мерзавца выборки вверх по течению, $ мастера мерзавца заказа, $ мерзавца перебазирования вверх по течению/мастер, $ GIT проверки 100-ретвит-багфикс, [убедиться, что все совершается по мере необходимости в отрасли], $ мерзавец перебазироваться мастер – ben39

+0

после выполнения: 'GIT мастер фотографии GIT слияния myFeature мерзавца push изначальный хозяин' У меня '! [reject] multi-senders -> multi-senders (non-fast-forward) Ошибка: не удалось нажать некоторые ссылки на 'ssh: // xxx' Чтобы предотвратить потерю истории, непереадресованные обновления были отклонены Перед повторным нажатием смените удаленные изменения (например, «git pull»). См. « « Замечание о быстрой перемотке »раздела« git push -help »для деталей.' – ben39

+0

Что касается вашего второго комментария - вы перебазировали мастера, прежде чем пытались слиться? (Посмотрите на свой первый комментарий чуть позже, когда у меня будет запасной момент - извините, супер занят здесь!) –

0

git checkout -b FeatureA (создание и контроль филиал)
git push origin FeatureA (нажать вновь созданный филиал в происхождении)

Работа на новой ветке FeatureA. Вы не хотите частых слияний, а затем перебазировать

git rebase origin 

В будущем, когда вы захотите объединиться в мастер.

git checkout master 
git merge FeatureA 
git push origin master 
+0

В любое время я делаю «git rebase master», затем «git push origin/multi-senders». Я получаю следующее 'to ssh: xxx ![reject] multi-senders -> multi-senders (non-fast-forward) Ошибка: не удалось нажать некоторые ссылки на 'ssh: // xxx' Чтобы предотвратить потерю истории, непереадресованные обновления были отклонены , Перед повторным нажатием смените удаленные изменения (например, «git pull»). Подробнее см. В разделе «Заметка о быстром переходе» в «git push -help». ' – ben39

Смежные вопросы