Допустим, у нас есть две версии библиотеки X: v1 и v2
Я сопровождаю другую библиотеку Y, которая использует библиотеку X. Я использовал v1 библиотеки, и она там в master.
Затем в библиотеке X появилась новая версия v2, которая потребовала, чтобы я изменил способ использования библиотеки (только изменения пакета, библиотека X изменила свое имя). Версия v1 устарела.
Однако, поскольку моя библиотека в настоящее время используется корпоративными пользователями, которые не хотят обновляться до более новой версии моей библиотеки, которая использует v2. Также я должен предоставить исправления к старой версии по контракту.
У меня было две ветви:
- master (использует v1)
- new_master (использует v2)
Способ, которым я сделал это изменение, заключается в разработке на master и перебазировании new_master на master. Тогда у меня может быть один коммит, который содержит изменения, которые заменяют все пакеты v1 на пакеты v2 (единственными изменениями являются строки импорта).
master x----x----x----x----x----n
new_master x----x----x----x----x----f
(после перезагрузки)
master x----x----x----x----x----n
new_master x----x----x----x----x----n----f
Сейчас Я добавил новую функцию в свою библиотеку, которой требуется версия 2 библиотеки X. Так что она будет существовать только в new_master. После добавления новой функции дерево стало таким:
master x----x----x----x----x----x----n
new_master x----x----x----x----x----x----f----n
Я могу сделать то же самое здесь, но не забудьте зафиксировать коммит n
в главном дереве. Я не хочу добавлять еще одно исправление после n
от new_master.
Что я получу, если сделаю обычную повторную базу:
master x----x----x----x----x----x----n
new_master x----x----x----x----x----x----n----f----n----f
Second f
- это новый фиксированный фикс, потому что после второго n
commit ветвь new_master
не скомпилируется.
Что мне нужно получить:
master x----x----x----x----x----x----n
new_master x----x----x----x----x----x----n----F----n
Где фиксация F
- это новая фиксация фиксации.
Что я сейчас делаю для достижения этой цели?
- Я решаю эту проблему , создав новую ветку с именем
new_master2
из new_master, затем удалив новую функцию там. - Затем я перебрасываю
new_master2
на мастера. - Фиксация для новой функции потерян, так что я выбираю его из new_master.
- Наконец я удаляю ветку
new_master
и переименовываю new_master2
в new_master. - Я заканчиваю sh это прилагая силу к пульту sh.
Что я пытаюсь сделать?
Найти другой способ сделать то же самое, без создание временной ветки new_master2
. * 10 73 *