Как я могу сделать исправление на master и интегрировать его в мою менее стабильную ветку (и)?

Сейчас я использую Git для одного из моих проектов, и мне это нравится.

Однако, так как я работаю над проектом только один, я использовал только команды

git status
git add .
git commit -m 'message here'
git push origin master

Я давно перенес проект на удаленный доступ (я Capistrano для развертывания), и все работает отлично.

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

Что мне интересно, так это то, что если я работаю над newdesign ветви, и я вижу ошибку в master ветка, как можно исправить ошибку на master а затем интегрировать это исправление в newdesign ветка, чтобы последние были в курсе актуальной логики?

2 ответа

Решение

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

Допустим, вы создали develop ветвь вытекает из master и вы сделали несколько коммитов на этой ветке:

Внезапно, вы понимаете, что вам нужно быстро исправить ошибку на master; вместо того, чтобы работать непосредственно от master, вы должны создать кратковременную ветку исправления ошибок, чтобы изолировать задачу исправления ошибок от вашего master ветка:

git checkout master
git checkout -b bugfix

Сделав один или несколько коммитов на bugfix филиал, чтобы решить проблему,

Вы должны убедиться, что все работает как надо (запустить тесты и т. д.). Когда вы довольны состоянием вашего кода на bugfixслить это в master:

git checkout master
git merge bugfix

На этом этапе вы можете нажать (теперь исправлено) master перейти к удаленному и удалить bugfix ветка:

git push origin master
git branch -d bugfix

Теперь, чтобы интегрировать последние изменения на master в developПо сути, у вас есть два варианта.

  1. сливаться master в develop, запустив:

    git checkout develop
    git merge master
    

  2. В качестве альтернативы, ребаз develop на вершине master, запустив:

    git checkout develop
    git rebase master
    

В любом случае ваш develop В ветке теперь будет исправление, и вы сможете продолжить работу над ним.

Предположим, у вас есть ветки master и dev.

Вы работаете над dev для своих новых функций, и вы исправляете master.

Затем вы проверяете dev и объединяете master с dev. Таким образом, мастер исправлен, и dev может извлечь выгоду из исправления, которое вы сделали, и сохраняет свою историю.

Кроме того, вы можете перебазировать dev поверх ветки. Это дает вам "более чистую" историю в том смысле, что у вас нет точек слияния.

Смотрите руководство git по слиянию: http://git-scm.com/docs/git-merge

Другие вопросы по тегам