Рабочий процесс Git поддерева - PullRequest
3 голосов
/ 25 июня 2011

В моем текущем проекте я использую форум с открытым исходным кодом (https://github.com/vanillaforums/Garden).Я планировал сделать что-то вроде этого:

git remote add vanilla_remote https://github.com/vanillaforums/Garden.git
git checkout -b vanilla vanilla_remote/master
git checkout master
git read-tree --prefix=vanilla -u vanilla

Таким образом, я могу внести изменения в папку vanilla (например, изменить конфигурацию) и зафиксировать ее в моей основной ветке, а также переключиться в свою ветку vanilla наполучать обновления.Моя проблема в том, что когда я пытаюсь объединить ветку вместе

git checkout vanilla
git pull
git checkout master
git merge --squash -s subtree --no-commit vanilla
git commit -a -m "update commit"

Проблема в том, что «обновление коммита» идет поверх моих коммитов и «перезаписывает» мои изменения.Я бы предпочел, чтобы мои коммиты воспроизводились поверх обновления.Есть ли простой способ сделать это?Я не очень хорош в Git, так что, возможно, это неправильный подход.Кроме того, я действительно не хочу смешивать свою историю с историей ванили.

Ответы [ 4 ]

3 голосов
/ 15 января 2013

Я закончил с этой схемой:

  1. Работа над моей разработкой ветки, касающейся файлов из поддерева .

  2. Обновление ветки поддерева с помощью сжатого развития коммитов:

    git merge -s поддерево --squash --no-commit разработка

  3. Обновите ветку поддерева с помощью своего удаленного хранилища.

  4. Обновление разработка с раздавленным поддерево фиксирует:

    git merge --squash -s поддерево --no-commit поддерево

3 голосов
/ 25 июня 2011

Если вы хотите работать с поддеревьями, вы, вероятно, захотите использовать git subtree.Он обеспечивает несколько более удобный интерфейс для такого рода вещей, включая команды слияния / вытягивания для объединения в поддерево (сжатие является необязательным) и команды разбивки / толчка для разделения изменений на поддерево и отправки их обратно в свое собственное.Сделки рЕПО.

1 голос
/ 25 июня 2011

Использование

git merge --squash -s subtree --no-commit vanilla

не будет "перезаписывать" ваши изменения. Я надеюсь, что под «обновлением коммита» вы подразумеваете коммит, который вы сделали после слияния поддерева, поскольку он имеет --no-commit и не будет фиксироваться сам по себе.

0 голосов
/ 25 июня 2011

Я тоже не мастер git (посмотрите, что я там делал ;-)) ... однако, я думаю, вы можете посмотреть на команду rebase:

http://book.git -scm.com / 4_rebasing.html

...