問題タブ [git-rewrite-history]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - 複数のブランチにまたがる Git インタラクティブ リベース
削除したい機密コンテンツを含むソースファイルを持つgitリポジトリがあります(ファイルを削除したくないので、そのコンテンツを修正するだけです)。コミットは、プロジェクト開発のかなり早い段階 (ブランチが 1 つしかなかったとき) でしたが、現在は他の n 個のブランチでその役割を果たしています。
すべてのブランチでクリーンアップするために実行できる git-fu はありますか? インタラクティブなリベースは、一度に 1 つのヘッドのみを機能させます。
私はgithubでこのコマンドを見つけました:
ただし、削除に対してのみ機能し、修正に対しては機能しません。
git - git filter-branch リポジトリからすべてのサブモジュールを削除
こんにちは、履歴の書き換えに成功し、使用して抽出したい 5 つのフォルダーを取得し、git filter-branch -f --prune-empty --tree-filter 'rm -rf <all unwanted dirs>'すべての git 履歴を保持しました。
残っている唯一の問題はサブモジュールです。まだコミットを行っています
Subproject commit <hash>
これらのサブモジュールのコミットをすべて git 履歴から完全に削除したいのですが、どうすればこれを達成できますか?
git - 最新のコミットを除くすべてのコミットを非対話的に押しつぶすことで、肥大化した Git リポジトリのサイズを縮小するにはどうすればよいですか?
私の Git リポジトリには数百ギガバイトのデータ (データベース バックアップなど) があるため、古くて古いバックアップを削除しようとしています。だから私は当然、速いものが必要です。速いほど良い。
最新のものを除くすべてのコミットを押しつぶす (または単純に削除する) にはどうすればよいですか?対話型リベースで各コミットを手動で押しつぶす必要はありません。具体的には、使用する必要はありません
たとえば、次のコミットがあります。
私が欲しいのはこれです(との間のすべてを押しつぶしAますH)A:
または、これでも問題なく動作します。
すべてのコミットをスカッシュする方法についての回答がありますが、最近のコミットのいくつかを保持したいと思います。最新のコミットもつぶしたくありません。(特に、上から数えて最初の 2 つのコミットを維持する必要があります。)
(編集、数年後。この質問に対する正しい答えは、仕事に適したツールを使用することです。Git は、バックアップを保存するための非常に優れたツールではありません。それがどんなに便利であってもです。より良いツールがあります。 )
git - BFGレポクリーナーを使用して1つのフォルダー/ディレクトリを削除するには?
BFG を使用して 1 つのディレクトリのみを削除するにはどうすればよいですか?
ヘルプには次のように書かれています。
delete folders with the specified names (eg '.svn', '*-tmp' - matches on folder name, not path within repo)
--delete-folders "config"これは、リポジトリ内の任意の場所にある config という名前のすべてのフォルダーに一致することを意味しているようです。
git - 効果のない BFG 使用後の Git マージ複製
私はどういうわけか、リポジトリ全体(私だけが使用)に深くうんざりしており、それを整理するためにいくつかの支援を利用できます。
これが私がしたことです。コミット履歴の中に、ただ置いておきたくない資格情報を含むファイルがいくつかあることに気付きました。したがって、私は正当であり、BFG Repo-Cleaner を使用してこれらの問題を修正しようと決心しました。資格情報をすべて .gitignores に捨てて、履歴からそれらを削除しようとしました。ドキュメントの指示に従って、次のコマンドを実行しました。
この時点で、BFG から、x 個のファイルが見つかって削除されたことが通知されました。甘い。
端末ログによると、レポを更新しました。ここまでは順調ですよね?私は自分の github アカウントにアクセスし、数回クリックした後、ファイルとすべての資格情報がまだ履歴に残っていることを確認します。戻って同じコマンド セットを試しますが、ファイル リムーバーの代わりに次の行を使用します。
ここで、passwords.txt は、削除したいすべての資格情報の文字列インスタンスを含むファイルです。繰り返しになりますが、BFG ログは、修正されたインスタンスがいくつかあることを示しています。プッシュアップして確認すると、Github に座っている資格情報がまだ残っています。すべてのコミットの SHA-1 キーが変更されていることに気付いたので、おそらく BFG が何かを行ったのでしょう。
この時点で、私はあきらめて仕事に戻ろうとします。後で整理することにします。私はいくつかの作業を行い、押し上げようとすると、奇妙なマージ競合が発生します (コミットで 50 進んでいて 50 遅れています)。何?プルしてマージしようとすると、突然、git 履歴のすべてのコミットの名前が重複し、そのうちのいくつかは空白になっています。Github ネットワーク グラフを確認すると、最初のコミットから始まる 2 番目のブランチがあり、最後のコミットで圧縮されたすべてのコミットを正確に反映しているように見えます (私はブランチを作成したことがなく、直線的に作業を進めただけです)。
それらはすべて時系列で複製されているため、以前のコミットに戻すことはできません。私の資格情報はまだそこにあり、現在は 2 倍のインスタンスがあり、私の履歴は 2 倍になり、理解しようとすると非常に混乱します。BFG を最初から実行して、レポを新たに複製およびミラーリングしようとすると、Github で確認できるにもかかわらず、クレデンシャルがないと表示されます。何が起こったのか、もしあったとしてもどうすれば元の状態に戻ることができるのかを理解するのに、私は本当に助けを借りることができました.
レポ全体を削除して、新たに開始することを検討しています。私は本当にそれをしたくありません。
tldr; BFG を使用してみましたが、レポ内のすべてのコミットの中途半端なバージョンを何らかの方法で複製し、もつれを解くことができず、怪我に侮辱を加えるために、BFG は何もせず、その役割を果たしたと主張しています。
git - 「foo」と「bar」以外のすべてのファイルを削除して、git リポジトリの履歴を書き換えます。
git リポジトリの履歴で「foo」でも「bar」でもないファイルをすべて削除したい。rm -rf !(foo|bar)現在のディレクトリ内の「foo」でも「bar」でもないファイルを削除する場合に機能します。私は次のアイデアを思いつきました:
$ git filter-branch --tree-filter 'rm -rf !(foo|bar)' --prune-empty HEAD
ただし、これにより次のエラーが発生しましたが、なぜ機能しないのか本当にわかりません。
Rewrite 75c1ec1ef083338ca2e88db9cc6107c1630d91e9 (1/871)~/libexec/git-core/git-filter-branch: 1: eval: Syntax error: "(" unexpected
git - リベースせずに古い Git コミットをプルーニングする
巨大なツリー (~60 GiB) といくつかの履歴を持つ Git リポジトリがあり、古いバージョンには多くの削除されたファイルが含まれているとします。
古い履歴を整理したいのですが、コミットごとに数時間かかるため、整理ポイントの後にすべてのコミットをing しません。 rebase
削除する最初のコミット オブジェクトを削除して、
git gc古いもの (現在は参照されていない) をすべて削除することはできますか? それとも、オブジェクトが見つからないためにパニックが発生しますか?git replace削除したい最初のコミットをダミーのコミットに置き換えてから呼び出すことはできますgit gcか?古いコミットをその場で削除する他の方法はありますか?