0

master からブランチを作成したいのですが、このブランチに空のツリーが必要です。少し調べたところ、次のような状況にたどり着きました。

  • マスター ブランチには、ダミー ファイルを含む単一のコミットがあります。
  • 新しいブランチをチェックアウトします
  • すべてのファイルを削除してコミットします
  • --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 like を使用しようとしています

$ git rebase --onto HEAD~2 HEAD^  

しかし、最終的には単一のコミット (「初期コミット」) とそのすべての参照 (HEAD、マスター、新しいブランチ) になります。そして、新しいブランチにチェックアウトすると、ダミーファイルが戻ってきます。

「新しいブランチの最初のコミット」はどこに行ったのですか? 私は行方不明ですか?

Obs .: これらのブランチを関連付けたいが、親コミットからファイルを保持したくないため、これを行っています。

4

1 に答える 1

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
于 2013-10-05T01:44:31.880 に答える