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

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

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

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

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

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

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

Ответ 1

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

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

enter image description here

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

git checkout master
git checkout -b bugfix

enter image description here

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

enter image description here

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

git checkout master
git merge bugfix

enter image description here

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

git push origin master
git branch -d bugfix

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

  1. Объедините master с develop, запустив:

    git checkout develop
    git merge master
    

    enter image description here

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

    git checkout develop
    git rebase master
    

    enter image description here

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

Ответ 2

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

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

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

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

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