Git Merge Старая модифицированная версия и Новая Не модифицированная - PullRequest
0 голосов
/ 02 февраля 2011

Я работаю над улучшением одного популярного программного обеспечения форума php. Месяц назад я запустил репозиторий с git для версии 1.0:

git init .
(copied files here of version 1.0)
git add .
git commit

После этого я работал над улучшением этого программного обеспечения в течение 1 месяца (делал коммиты) Теперь доступна новая официальная версия. Версия 1.1. Я должен объединить новые функции форума, не удаляя мой код. Какие команды git я должен использовать?

Я пытаюсь сделать следующее:

1) git branch vendor
2) git checkout vendor
3) delete old files and put files of version 1.1
4) git checkout master
5) git merge vendor

Но когда я это сделал, я потерял все свои модификации. Куда я иду не так? Спасибо.

1 Ответ

2 голосов
/ 03 февраля 2011

В идеале, программное обеспечение, над которым вы работаете, уже должно иметь какой-либо общедоступный репозиторий, который вы можете использовать для git-svn или какого-либо другого импортера.Предполагая, что по какой-то причине это невозможно, вот что я бы порекомендовал.

Создайте ветку под названием «vendor», но начиная с коммита, в который вы добавили версию 1.0 (похоже, это ваш корневой коммит).Всякий раз, когда появляется новая версия, проверьте эту ветку, удалите все и поместите дамп в выпуск (как вы говорите).Важная часть: никогда не включайте ваши изменения в эту ветку .Затем вы можете свободно слить его в свою основную ветку.С этим рабочим процессом вы можете столкнуться с конфликтами слияний чаще, поскольку в новый выпуск может быть внесено большое количество изменений.Опасность работы.

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

x [1.0] ------- x [1.1] ------------ x [1.2] (vendor)
 \               \                    \
  o - o - o - o - o  - o - o - o - o - o (master)

Кстати, жирный текст - это то, где вы ошиблись.Вы запустили ветку vendor из вашей основной ветки, поэтому, когда вы зафиксировали v1.1, ваша история выглядела так:

x [1.0] - o - o - o - o - o (master) - x [1.1] (vendor)

Так что, естественно, когда вы слили vendor в master, вы получили именно v1.1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...