2014-10-01 5 views
0

Мы используем git, ветви функций и rebase, чтобы довести ветки функций до нашего мастера. Таким образом, наш график выглядит такGIT, Как применить исправление в рабочем процессе rebase

* 08a3854 - (master, Feature_2) implement feature_2 more 
* cf944c7 -      implement feature_2 ... 
* 4b4ed7c - (Feature_1)   implement feature_1 more 
* 483fd88 -      implement feature_1 ... 

Если теперь мы обнаружили ошибку в Feature_1 (и эта функция не так стар) мы бы исправить эту функцию непосредственно на этой точке. Сначала мы создаем ветку из Feature_1 для исправления ошибок.

* 08a3854 - (master, Feature_2) implement feature_2 more 
* cf944c7 -      implement feature_2 ... 
| * 2c383b6 - (Feature_1_fix) fix for feature_1 
|/ 
* 4b4ed7c - (Feature_1)   implement feature_1 more 
* 483fd88 -      implement feature_1 ... 

В конце концов, мы хотели бы принести ветку Feature_1_fix в Feature_1 ветку и удалить ветку исправить потом так, что результат может выглядеть следующим образом.

* 08a3854 - (master, Feature_2) implement feature_2 more 
* cf944c7 -      implement feature_2 ... 
* 2c383b6 - (Feature_1)   fix for feature_1 
* 4b4ed7c -      implement feature_1 more 
* 483fd88 -      implement feature_1 ... 

Возможно ли и что мы будем делать?

ответ

0

В какой-то мере это теоретически возможно, но вы определенно не хотите этого делать.

Хеш каждого фиксажа зависит от всех его предков. Если вы измените фиксацию, все хэш-значения хэша будут меняться. В этом смысле ваш третий примерный график неверен: коммиты cf944c7 и 08a3854 будут меняться.

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

08a3854 * (old obsolete master) implement_feature_2 more 
cf944c7 *      implement feature_2 
2222222 * | (master)    implement_feature_2 more 
1111111 */      implement feature_2 
2c383b6 * (Feature_1)   fix for feature_1 
4b4ed7c *       implement feature_1 more 
483fd88 *       implement feature_1 

Фиксирует 1111111 и 2222222 являются новыми, и все, кто на основе работы по 08a3854 должен перебазироваться эту работу на 2222222, а также.

Кстати: git не позволяет вам нажимать что-то подобное без явного указания флага --force.

Я бы предложил просто создать ветку и объединить ее. Я также не обязательно рекомендовал бы привязать ветвь исправления непосредственно к последнему фиксации функции. Если у вас много изменений, слияние его с текущим мастером может привести к множеству конфликтов.

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