Я хочу иметь следующую структуру версий:
(my private changes to 0.1.0) - A - B - C - ...
/
(upstream repo) - 0.1.0 - 0.2.0 - ...
\
(my private changes to 0.2.0) - D - E - F - ...
Я не хочу объединять свои изменения с изменениями в исходной версии, потому что восходящая версия развивается быстро, и обычно существует множество трудных для разрешения конфликтов, поскольку исходный код был значительно переработан. Когда выйдет 0.3.0, я собираюсь просто создать его точную копию, забыв о своих личных изменениях, а затем повторно применить мои личные исправления один за другим. Но я не хочу, чтобы мои старые изменения полностью исчезли - я хочу, чтобы они оставались где-то неподвижно (на отдельной ветке?).
git rebase
не то, что я хочу. Согласно Pro git book , при перебазировании попытка повторно применить патчи A-B-C до 0.2.0. Вот пример ситуации между вышедшими версиями 0.1.0 и 0.2.0:
(upstream) - 0.1.0 - (my master) - A - B - C
Сейчас вышел 0.2.0:
(my master) - A - B - C
/
(upstream) - 0.1.0 - 0.2.0
Я не хочу переоценивать свои изменения A - B - C из-за слишком большого количества конфликтов. Я хочу пометить свою ветвь A - B - C как «my-0.1.0» и начать «новую» основную ветку с 0.2.0:
(my-0.1.0) - A - B - C
/
(upstream) - 0.1.0 - 0.2.0 - (my new master)
Я хочу, чтобы моя новая основная ветвь была чистой копией восходящей версии 0.2.0, без каких-либо попыток повторно применить к ней мои старые наборы изменений A-B-C. Так что позже я могу выбирать изменения A-B-C один за другим, если они понадобятся мне в мире после версии 0.2.0.
Как мне поставить метку my-0.1.0? Это метка, метка, ветка? Как мне запустить пустую главную ветку с 0.2.0? Обратите внимание, что есть два разных репо: мое репо и обратное репо. Нужно ли мне копировать восходящую ветку из восходящего репо в мой репо? Как я могу убедиться, что 0.2.0 тянет после 0.1.0, а не после C? Если я просто сделаю запрос на получение после
(вверх по течению) - 0.1.0 - (мой мастер) - A - B - C
Я получаю
(вверх по течению) - 0.1.0 - (мой мастер) - A - B - C - «0.2.0 объединено с ABC»
это не то, что я хочу.
Также иногда я хочу отодвинуть определенные изменения (например, E) обратно в восходящий поток. Можно ли создать запрос на извлечение только для изменения E? В дарках это возможно. Если это невозможно с Git / GitHub, тогда мне нужно будет создать отдельную ветку, повторно применить изменения в E вручную. Как мне поступить?