125

master と configs という 2 つの無関係なブランチを持つ git リポジトリがあります。構成を作成し、すべてのファイルを消去してから、構成ファイルのみに配置しました。これをリモートリポジトリにプッシュしたいのですが、それは新しい空のブランチでした(すべての変更のログと元のブランチの古いリビジョンはありません)。

すべての履歴を消去してプッシュするにはどうすればよいですか?

4

4 に答える 4

185

すべてのファイルをパージしても、履歴は削除されません。最初に履歴のないブランチを作成し、構成ファイルを追加する必要があります。最近git checkout--orphan履歴のない枝を作るという選択肢があります。--orphanオプションに関する情報は次のとおりです。

--orphan <new_branch>

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

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

これは、完全な履歴を公開せずにコミットからツリーを公開する場合に役立ちます。これを実行して、現在のツリーは「クリーン」であるが、完全な履歴には独自のコードや邪魔されたコードが含まれているプロジェクトのオープン ソース ブランチを公開することができます。

<start_point> のパスとはまったく異なる一連のパスを記録する切断された履歴を開始する場合は、孤立したブランチを作成した直後に、「git rm -rf . " 作業ツリーの最上位から。その後、別の場所からファイルをコピーしたり、tarball を抽出したりして、新しいファイルを準備し、作業ツリーを再作成する準備が整います。

checkoutのドキュメントへのリンクは次のとおりです。走ることもできgit help checkoutます。

履歴なしでブランチを作成すると、それをサーバーにプッシュしても、その履歴はありません。git pushFWIW、 「リモートブランチをローカルブランチと同じように見せる」と考えるのに役立ちます。したがって、履歴があり、プッシュすると、履歴が表示されます。そうしないと、プッシュされたブランチは実行されません。

于 2012-09-22T11:32:02.917 に答える
19

個人情報を共有したり履歴を削除したりせずにフリーランサーにコードを送信するには、これを行う必要がありました。

あなたのいずれかが SourceTree を使用している場合、これが私がなんとかそれを実行した方法です。ソース管理に不慣れなため、何か間違ったことをしたり、何かを忘れたりしている場合はお知らせください。

  1. ソースツリーのターミナルボタンに行きました。
  2. コマンド「git checkout --orphan clean-ver」を使用して、新しい「orphan」ブランチを作成しました。ここで、clean-ver は私のブランチ名です。
  3. ターミナルを閉じると、新しい孤立したブランチにいたため、コミット ログがクリアされていることがわかりました。すべてのソース コードをステージングし、変更をコミットしました。
  4. リポジトリ>リモートの追加またはリポジトリ>リポジトリ設定>追加のいずれかでbitbucketリポジトリをセットアップしました。
  5. それを閉じて、プッシュボタンをクリックしました
  6. 新しい「clean-ver」ブランチを選択すると、OK と表示されました。

bitbucket を確認したところ、これが機能しているようで、コミット履歴を破棄しました。

これが誰かを助けることを願っています。

于 2014-03-17T16:29:00.267 に答える
1
git checkout --orphan <name_you_choose_for_orphan_branch>
git rm . -r -f
于 2021-11-20T08:28:02.377 に答える