Git rebase -onto - результат одиночной фиксации
Я хочу создать ветвь из мастера, но мне нужна эта ветка, чтобы иметь пустое дерево. После небольшого исследования я придумал следующую ситуацию:
- У ветки мастера есть единственная фиксация с фиктивным файлом.
- Я проверяю новую ветку
- Я удаляю все файлы и фиксирую
- Я создаю новую фиксацию с -allow-empty
Следующие команды помогут вам:
$ git init
$ touch dummy
$ git add .
$ git commit -m 'initial commit'
$ git checkout -b new-branch
$ git rm -rf .
$ git commit -m 'clean up tree'
$ git commit --allow-empty -m 'new branch initial commit'
Теперь я хочу избавиться от фиксации "очистить дерево". Я пытаюсь использовать rebase --onto как
$ git rebase --onto HEAD~2 HEAD^
Но я получаю одиночную фиксацию ('initial commit') и все ссылки на нее (HEAD, master, new-branch). И если я выхожу в новую ветку, возвращается фиктивный файл.
Где началось мое "новое начальное совершение ветки"? Что мне не хватает?
Обл.: Я делаю это, потому что я хочу связать эти ветки, но я не хочу, чтобы файлы были сделаны из родительского коммита.
Ответы
Ответ 1
true | git mktree | xargs git commit-tree -p master | xargs git branch new-branch
который является самым быстрым однострочным для
emptytree=$(git mktree </dev/null)
emptycommit=$(git commit-tree -p master $emptytree </dev/null)
git branch new-branch $emptycommit