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

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

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

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

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

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

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


person BigJobbies    schedule 19.09.2014    source источник


Ответы (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 теперь будет содержать исправление, и вы сможете возобновить работу над develop.

person jub0bs    schedule 19.09.2014
comment
Owww ... Большое вам спасибо за это ... Это довольно хорошо ответило на мой вопрос. - person BigJobbies; 19.09.2014
comment
Ветка исправления не кажется необходимой. Вы можете просто зафиксировать непосредственно мастеру, а затем git rebase master develop. Кроме того, rebase работает, только если разработка не общедоступна. - person Mateen Ulhaq; 06.01.2020
comment
@MateenUlhaq Я предпочитаю использовать ветку исправления ошибок: если моя первоначальная попытка исправить ошибку ни к чему не приводит, я могу просто удалить ветку исправления ошибок и перезапустить с нуля в master, вместо того, чтобы исправлять мою неудачную попытку в master. - person jub0bs; 13.01.2020

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

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

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

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

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

person vratojr    schedule 19.09.2014
comment
Привет, @vratojr ... Но если я объединим master с dev, разве я не потеряю работу над новым дизайном, которую делал в dev? - person BigJobbies; 19.09.2014
comment
Нет, вы не потеряете свои изменения в ветке dev... что делает слияние, так это просто копирует содержимое одной ветки в другую ветку, где цель или другая ветка отстает в коммитах - person justrohu; 19.09.2014
comment
О, кажется, я понимаю @justrohu ... Значит, он просто скопирует изменения, из которых разработчик отделился от мастера? Все, что до этого, не имеет значения - person BigJobbies; 19.09.2014
comment
@BigJobbies Да, это как бы копирует это, но если есть какие-либо другие изменения в ветке Master, эти изменения также сохраняются. - person justrohu; 19.09.2014