git слияние из папки поддерева в мастере в корень ветки

На самом деле мой вопрос:
Есть ли способ объединить папку в master с корнем в ветке?

Я хочу:

  1. дерево чтения из ветки в папку в ветке master
  2. внесите некоторые изменения (добавьте файлы в папку поддерева) в ветке master
  3. объединить эти изменения (добавленные файлы) из папки поддерева в master в корень ветки

Я пробовал это руководство: https://git-scm.com/book/en/v1/Git-Tools-Subtree-Merging
Но результаты неожиданны:

Я сделал:

    $ git init
    $ touch fileInMaster
    $ git add -A
    $ git commit --all -m 'initial commit'
    $ git checkout master
    $ git remote add rack_remote https://github.com/schacon/rack.git
    $ git fetch rack_remote
    $ git checkout -b rack_branch rack_remote/master
    $ git checkout master
    $ git read-tree --prefix=rack/ -u rack_branch
    $ git add -A
    $ git commit --all -m 'After read-tree to rack folder'
    $ echo 0 > rack/fileInRack
    $ git add -A
    $ git commit --all -m 'Add fileInRack file to rack folder'
    $ git merge --squash -s subtree --no-commit rack_branch

Я ожидаю:

  • Новый файл 'fileInRack' в ветке master в папке rack
  • Новый файл 'fileInRack' в корневом каталоге rack_branch

Но после слияния поддеревьев git заметил меня:

Удаление стойки/файлаInRack
Сквош-фиксация – без обновления HEAD
Автоматическое слияние прошло успешно; остановлен перед фиксацией в соответствии с запросом

Но мне нужно добавить, а не удалить.

Итак, что я делаю неправильно?
Есть ли другой способ объединить папку в master с корнем в ветке?


person qwertyroot    schedule 17.03.2016    source источник


Ответы (1)


Вместо

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

ты можешь сделать

git checkout rack_branch
git merge --squash -s recursive -Xsubtree --allow-unrelated-histories master
git commit -m "commit fileInRack to rack_branch"

РЕДАКТИРОВАТЬ: Причина, по которой я наткнулся на этот пост, заключается в том, что у меня аналогичная проблема, и мое решение выше не работает (см. здесь). Обратите внимание на редактирование опции --no-ff. Может быть, стоит всегда использовать эту опцию?

person poidl    schedule 30.07.2016