私は、master と configs という 2 つの関連のないブランチを持つ Git リポジトリを持っています。configs を作成し、すべてのファイルを削除してから、構成ファイルのみを配置しました。今、これをリモート リポジトリにプッシュしたいのですが、これは新しい空のブランチです (すべての変更のログと元のブランチの古いリビジョンはありません)。
すべての履歴を消去してプッシュするにはどうすればよいですか?
ベストアンサー1
すべてのファイルを消去しても、履歴は削除されません。まず履歴のないブランチを作成し、設定ファイルを追加する必要があります。最近では、履歴のないブランチを作成するオプションgit checkout
があります--orphan
。オプションに関する情報は次のとおりです--orphan
。
--orphan <新しいブランチ>
<start_point> から始まる <new_branch> という名前の新しい孤立ブランチを作成し、それに切り替えます。この新しいブランチで行われた最初のコミットには親がなく、他のすべてのブランチやコミットから完全に切り離された新しい履歴のルートになります。
インデックスと作業ツリーは、以前に「git checkout <start_point>」を実行した場合と同様に調整されます。これにより、「git commit -a」を簡単に実行してルートコミットを行うことで、<start_point> に類似したパスのセットを記録する新しい履歴を開始できます。
これは、完全な履歴を公開せずにコミットからツリーを公開する場合に役立ちます。現在のツリーは「クリーン」であるが、完全な履歴には独自のコードやその他の制限のあるコードが含まれているプロジェクトのオープンソース ブランチを公開する場合に、これを実行するとよいかもしれません。
<start_point> とはまったく異なるパスのセットを記録する切断された履歴を開始する場合は、作業ツリーの最上位レベルから「git rm -rf .」を実行して、孤立ブランチを作成した直後にインデックスと作業ツリーをクリアする必要があります。その後、新しいファイルを準備し、他の場所からコピーしたり、tarball を抽出したりして、作業ツリーを再作成する準備が整います。
ドキュメントへのリンクはこちらチェックアウト走ることもできますgit help checkout
。
履歴のないブランチを作成したら、それをサーバーにプッシュしても、その履歴は保持されません。参考までに、これはgit push
「リモート ブランチをローカル ブランチと同じに見せる」と考えると役に立ちます。つまり、履歴があり、プッシュした場合は、履歴が保持されます。履歴がない場合、プッシュされたブランチには履歴が保持されません。