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