Как отслеживать происхождение / мастер в моей ветке dev git - PullRequest
5 голосов
/ 20 января 2012

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

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

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

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

  2. Я хочу, чтобы моя ветка была в курсе главной ветки.

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

  4. В какой-то момент нам придется объединить мою ветку FeatureA с origin / master.

Подведение итогов:

Как настроить ветку, которая вытягивает из источника / мастера, но выталкивает в источник / MY-BRANCH?

Как бы выглядел мой рабочий процесс?

UPDATE:

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

Эта страница на 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

Ответы [ 2 ]

5 голосов
/ 20 января 2012

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

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

git checkout -b myFeature

Вставьте это в новую удаленную ветвь (см. этот вопрос о стекопотоке , если вам нужно большеинформация об этом шаге)

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 голосов
/ 20 января 2012

git checkout -b FeatureA (создать и оформить ветку)
git push origin FeatureA (перенести вновь созданную ветку в исходную точку)

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

git rebase origin  

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

git checkout master  
git merge FeatureA  
git push origin master  
...