1. ホーム
  2. git

[解決済み] 履歴のない新しいブランチをプッシュする方法

2022-07-27 17:08:57

質問

私は、master と configs という 2 つの無関係なブランチを持つ git repo を持っています。 私は configs を作成し、すべてのファイルをパージし、そして設定ファイルのみに配置しました。 今、私はこれをリモート リポジトリにプッシュしたいのですが、新しい、空のブランチ (私のすべての変更のログと元のブランチの古いリビジョンなし) のようなものです。

どのように私はすべての履歴をパージし、それをプッシュすることができますか?

どのように解決するのですか?

すべてのファイルを削除しても、履歴は消えません。 まず、履歴のないブランチを作成し、設定ファイルを追加する必要があります。 最近では git checkout には --orphan オプションがあり、これは履歴のないブランチを作成します。 以下は --orphan オプションの説明です。

--orphan <new_branch>

新しいオーファンブランチを作成し、<new_branch>という名前で、<start_point>から開始し、それに切り替えます。この新しいブランチで行われた最初のコミットは親を持たず、他のすべてのブランチやコミットから完全に切り離された新しい履歴のルートとなります。

インデックスと作業ツリーは、あたかも以前 "git checkout <start_point>" を実行したかのように調整されます。これにより、"git commit -a" を実行してルートコミットを行うことで、<start_point> に似たパスのセットを記録した新しい履歴を簡単に開始することができます。

これは、あるコミットのツリーを、その全履歴を公開することなく公開したい場合に便利です。これは、現在のツリーは "clean"だが、全履歴にプロプライエタリなコードやその他の障害物が含まれるプロジェクトのオープンソースブランチを公開するために行うことができます。

もし、<start_point> のものとは全く異なるパスのセットを記録する切断された履歴を開始したいのであれば、作業ツリーのトップレベルから "git rm -rf ." を実行して、孤児ブランチを作った直後にインデックスと作業ツリーをクリアすべきです。その後、新しいファイルを準備し、他の場所からコピーしたり、tarball を抽出したりして、作業ツリーを再作成する準備が整うでしょう。

のドキュメントへのリンクはこちらです。 チェックアウト . また git help checkout も実行できます。

履歴のないブランチを作成したら、それをサーバーにプッシュするときに、その履歴もなくなります。 参考までに、私が考えるのに役立つのは git push を「リモートブランチをローカルブランチと同じように見せる」と考えるとよいでしょう。 つまり、履歴があり、プッシュすれば、履歴が残るということです。 そうでない場合は、プッシュされたブランチはそうではありません。