問題タブ [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 - gitリポジトリからファイルを削除します(履歴)
(解決済み、質問本文の下部を参照)
これを長い間探していると、今まで持っていたのは次のとおりです。
- http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/ および
- http://progit.org/book/ch9-7.html
ほぼ同じ方法ですが、どちらもオブジェクトをパックファイルに残します...スタックします。
私が試したこと:
まだパックにファイルがあります、そしてこれは私がそれを知っている方法です:
この:
同じ...
トリックを試しgit clone
てみましたが、いくつかのファイル(〜3000個)が削除されましたが、最大のファイルはまだ残っています...
リポジトリに2億までの大きなレガシーファイルがありますが、それらは本当に必要ありません...そしてリポジトリを0にリセットしたくありません:(
解決策:これは、ファイルを削除するための最短の方法です。
- check .git / packed-refs-私の問題は
refs/remotes/origin/master
、リモートリポジトリの行があったことでした。それを削除しないと、gitはそれらのファイルを削除しません。 - (オプション)
git verify-pack -v .git/objects/pack/#{pack-name}.idx | sort -k 3 -n | tail -5
-最大のファイルをチェックします - (オプション)
git rev-list --objects --all | grep a0d770a97ff0fac0be1d777b32cc67fe69eb9a98
-それらのファイルが何であるかを確認します git filter-branch --index-filter 'git rm --cached --ignore-unmatch file_names'
-すべてのリビジョンからファイルを削除しますrm -rf .git/refs/original/
-gitのバックアップを削除しますgit reflog expire --all --expire='0 days'
-すべての緩いオブジェクトを期限切れにしますgit fsck --full --unreachable
-ゆるい物体がないか確認しますgit repack -A -d
-再梱包git prune
-最終的にそれらのオブジェクトを削除します
git - 古いGitコミットから個人情報を削除する
オープンソースにしたいGitでバージョン管理されたプロジェクトがありますが、元々使用されていた環境に固有の個人情報が含まれています。問題の情報を変更して、リポジトリに含まれていない構成ファイルからロードします。そもそもこれを行うべきだったと思いますが、個人情報は以前のコミットにまだ存在しているので、どうすれば履歴から削除できますか?最新のコミットに基づいて新しいリポジトリを開始し、すべての履歴を失う必要がありますか、それとも個人情報の記録を削除しながら現在のリポジトリを回収する方法はありますか?
編集:明確にするために、この個人情報を含むファイルはまだ使用されているため、完全に削除したくありません。むしろ、それらの中にある特定の文字列の出現を削除/空白にする/変更したいと思います。
git - git履歴のファイルからテキストを置き換える方法は?
私は常にインターフェイス ベースの git クライアント (smartGit) を使用してきたため、git コンソールの経験はあまりありません。
ただし、履歴からすべての .txt ファイルの文字列を置き換える必要に直面しています (したがって、ファイル全体を消去するのではなく、文字列を置き換えるだけです)。次のコマンドを見つけました。
これを試してみたところ、残念ながら、パスワードが変更されている間に、すべてのバイナリ ファイルが破損していることに気付きました。画像などがすべて破損します。
バイナリ ファイルを破損させずにこれを行うためのより良い方法はありますか?
ありがとう。
編集:
何かと混同してしまいました。バイナリ ファイルが破損する原因となった実際のコードは次のとおりです。
上部のコードは、奇妙なことに、私のパスワードを含むすべてのファイルを実際に削除しました。
git - 書き換えられた Git リポジトリ履歴で開発チームを更新し、大きなファイルを削除します
いくつかの非常に大きなバイナリを含む git リポジトリがあります。それらはもう必要ありません。以前のコミットからファイルをチェックアウトできるかどうかは気にしません。したがって、レポのサイズを減らすために、履歴からバイナリを完全に削除したいと思います。
ウェブ検索の後、私の最良の(唯一の?)オプションは次を使用することであると結論付けましたgit-filter-branch
:
これまでのところ、これは良いアプローチのように思えますか?
答えが「はい」であると仮定すると、対処すべき別の問題があります。git マニュアルには次の警告があります。
警告!書き換えられた履歴は、すべてのオブジェクトのオブジェクト名が異なり、元の分岐に収束しません。元のブランチの上に書き換えられたブランチを簡単にプッシュして配布することはできません。完全な意味がわからない場合は、このコマンドを使用しないでください。問題を解決するために単純な単一のコミットで十分な場合は、とにかく使用しないでください。(公開された履歴の書き換えに関する詳細については、git-rebase(1) の「RECOVERING FROM UPSTREAM REBASE」セクションを参照してください。)
サーバーにリモートリポジトリがあります。各開発者は、それに対してプッシュおよびプルします。上記の警告 (およびその仕組みに関する私の理解) に基づくと、ローカル コピーで実行して変更をプッシュするgit-filter-branch
ことはできないと思います。git-filter-branch
そのため、暫定的に次の手順を実行する予定です。
- すべての開発者に、コミット、プッシュ、および作業を少し停止するように伝えます。
- サーバーにログインし、中央リポジトリでフィルターを実行します。
- 全員に古いコピーを削除してもらい、サーバーから再度複製してもらいます。
これは正しいと思いますか?これが最善の解決策ですか?
git - Git マージ コミットのリベース
次のケースを取り上げます。
トピックブランチでいくつかの作業があり、マスターにマージする準備ができました:
マスターからマージを実行し、競合を解決すると、次のようになります。
ここで、マージに時間がかかったので、別のフェッチを行って、リモート マスター ブランチに新しい変更があることに気付きました。
マスターから試すとgit rebase origin/master
、すべての競合を再度解決する必要があり、マージ コミットも失われます。
以下に示すような履歴になるように、マージ コミットをリベースするクリーンな方法はありますか?
git - Gitでコミットを非対話的に並べ替える方法
どの非対話型gitコマンドがBeforeからAfterへの変更を実現しますか?
前:
後:
git - Git で複数のコミットを修正して作成者を変更する方法
Git で一連のコミットを行いましたが、ユーザー名とユーザーの電子メール プロパティを正しく設定するのを忘れていたことに気付きました (新しいマシン)。これらのコミットを自分のリポジトリにまだプッシュしていないので、そうする前にこれらのコミットを修正するにはどうすればよいですか (マスター ブランチの最新の 3 つのコミットのみ)。
git reset
とを見てきgit commit -C <id> --reset-author
ましたが、正しい軌道に乗っているとは思いません。
git - gitリポジトリから古いバージョンのメディアファイルを削除する方法
いくつかの巨大なメディアファイル(画像と音声ファイル)を含むGitリポジトリがあります。これらのメディアファイルのいくつかのバージョンは、リポジトリに連続してコミットされています。ファイルは同じアセットの連続して改良されたバージョンであり、同じ名前を持っています。
大きくなりすぎているので、Gitリポジトリに最新バージョンのみを保持したいと思います。
これを行う最も簡単な方法は何ですか?
これらの変更をアップストリームリポジトリに正しく伝播するにはどうすればよいですか?
git - Gitリポジトリからのファイルのパージに失敗し、新しいバックアップを作成できません
次のコマンドを実行して、リモートリポジトリからファイルを削除しようとしました。
しかし、Gitはそれを不平を言います
新しいバックアップを作成できません。以前のバックアップはすでにrefs/original /に存在し
ます-fでバックアップを強制的に上書きします
rm:/.git-rewrite/backup-refsを削除できません:許可が拒否されました
rm:ディレクトリを削除できません/.git-rewrite:ディレクトリが空ではありません
これは、Windowsで.git-rewriteディレクトリをすでに削除した後のことです。
そのファイルを削除するにはどうすればよいですか?これは私のリポジトリにある29Mbのファイルなので、ファイルを削除する必要があります。
でコミットを削除しようとしましたgit rebase -i
が、コミットが多くの異なるファイルに触れたため、Gitが競合を訴え、安全のために中止しました。