2012-02-25 3 views
2

Работа в большой группе проекта это наша работа потока:GIT Отрасль Рабочий поток

// create branch 
git checkout -b mybranch 
(do work) 
// commit to branch locally 
git commit -a 
// push to remote 
git push origin mybranch 
(repeat) 

Когда сделано с работой в нашей отрасли мы сливаемся филиал в мастер:

// go to master 
git checkout master  
// update 
git pull master 
// merge our branch into master 
git merge mybranch 
(solve conflicts) 
git push 

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

Следующая сразу же после того, как мерзавца тянуть, мерзавец слияния mybranch, мерзавец толчок:

! [rejected]  master -> master (non-fast-forward) 
    error: failed to push some refs to '[email protected]:foo/project.git' 
    To prevent you from losing history, non-fast-forward updates were rejected 
    Merge the remote changes (e.g. 'git pull') before pushing again. See the 
    'Note about fast-forwards' section of 'git push --help' for details. 

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

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

Спасибо!

ответ

3

Не было проблем с вашим предыдущим рабочим процессом.

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

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

Если вы делаете новый клон хранилища, а оттуда делаете merge и push, это, вероятно, будет успешным.

+0

Почему повторно клонировать, когда вы можете git checkout master; git reset - плохое происхождение/мастер? – chazomaticus

+0

@chazomaticus Я понятия не имею, что было сделано в их локальном хранилище. Насколько нам известно, «происхождение» означало две разные вещи. Свежий старт чист и недвусмыслен. – Borealid

+1

Borealid, вероятно, прав об истории, переписываемой из-за, например, rebase. Я просто хочу добавить, что я буду держать свои ветви локальными, а не подталкивать их к происхождению, потому что у истока будет много ненужного «mybranch», если mybranch не будет передан другим, сохраните его локально. – ralphtheninja

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