ローカルのGitリポジトリに約50個のコミットがあります。私は現在のHEADの特定のファイルにいくつかの変更を加えました。これらのファイル変更をすべての前回のコミットに更新したいと思います。これはgitでこれを達成することが可能ですか?前回コミットしたファイルの内容を現在のデータに変更する
答えて
UPDATE - 私の元の回答のコマンドは機能しますが、リフレクションではインデックスフィルタで使用するのに最適ではないかもしれません。これについてのコメントを追加しました
可能ですが費用がかかります。
「履歴の書き換え」は、すべてのコミットのコミットIDを変更するものです。このレポを単独で使用していて、何か(ドキュメントなど)にコミットID(SHA)値を使用していない場合は、それはおそらく問題ありません。
他の人がrepoを使用している場合(または複数のクローンがある場合)は、カットオーバーを調整する必要があります。基本的に私のアドバイスは、すべての更新が共通のリポジトリ(おそらく起源)にプッシュされた後、すべてのクローンを破棄してから、書き換えを実行して原点を置き換えてから再クローンするように手配することです。技術的にはそうする必要はありませんが、git rebase
のドキュメント(実際には履歴書き換えに適用されます)の「上流リベースからの回復」を参照してください。
したがって、書き直しを行う場合、最も簡単な方法はおそらくgit filter-branch
を使用することです。 (あなたのレポについて一定の仮定が真である場合には、rebase
ベースのアプローチは、仕事ができる;しかしfilter-branch
は、より一般的に適用可能である。)
git filter-branch --index-filter 'git reset master -- file/to/be/rewritten' -- --all
これはあなた一度削除したいと思ういくつかの「バックアップ」のREFを作成し、結果を検証しました。私はもともとも動作するようです
git filter-branch --index-filter 'git checkout master -- file/to/be/rewritten' -- --all
を示唆し
注意。 reset
コマンドはより完全にインデックスの更新に関連しているので、ここでより良い選択肢になるかもしれません。
ちなみに、置き換えようとしているファイルが唯一のものが変更されたコミットがあれば、そのコミットは親と完全に一致します。必要に応じて、 '--prune-empty'オプションを' filter-branch'に含めることにより、そのコミットを削除することができます –
- 1. コミット中にサブバージョン内のファイルの名前を変更する
- 2. Git:履歴内のコミットの内容を変更する
- 3. git - コミットする前に現在の変更が反映されています
- 4. Bazaar:フック経由でコミットする前にファイルの内容を変更しますか?
- 5. GIT:現在のファイルを上書きせずに、前回のコミットからファイルをチェックアウトする方法は?
- 6. Linuxファイルの内容を変更する
- 7. .cppファイルの内容を変更する
- 8. R.javaファイルの内容を変更する
- 9. ファイルの内容を変更する
- 10. pyファイルの内容を変更する
- 11. 以前のコミットでGithubリポジトリの内容を変更し、requirements.txtの変更されたコミットにリンクすることは可能ですか?私は現在、以前のレポで引っ張ってる
- 12. 現在のブランチの内容を別のブランチに上書きするためのコミットを作成する
- 13. .bat括弧内の内容でファイルの名前を変更します
- 14. gitコミットされた内容と変更されていない内容
- 15. バッチファイル:内容に基づいて複数のファイルの名前を変更する
- 16. ファイルの内容を変更するためのPHPコード
- 17. 前回のコミットの変更をさらに修正するには?
- 18. 既に存在するファイルの名前を変更します。
- 19. Bazaar:変更がコミットされたコミット時の自動ファイル変更
- 20. 前のコミットのファイル名を変更する方法
- 21. gitのすべてのコミットを通してファイルの内容を変更する方法はありますか?
- 22. 複数のファイルの内容をファイル名で変更します
- 23. フォルダ内の重複したファイルの名前を変更する
- 24. JavascriptをJSファイル内のテキストの内容を変更する
- 25. カスタムビルドアクティビティ - 前回のコミット以降に加えられた変更を表示
- 26. CSS:使用したpngファイルのラベル内容のサイズの変更
- 27. PR内でコミットから変更されたファイルをアンステージする
- 28. 現在のsbtタスクスコープ内の変数を変更する
- 29. 現在の日付を追加してファイルの名前を変更
- 30. intellijの現在のブランチの名前を変更する
なぜそれをしたいですか? gitの考えは、変更履歴を追跡することです。 – Fede
@Fede - 誰かがこれを行う理由はいくつかあります(そしてそれほど多くの理由はありません)。私は、これを行うことを検討している人は、彼らの推論をチェックして再確認すべきであるとアドバイスすることに同意しませんが、最終的に問題は何ですか?OPは、特定のファイルを置き換えて、約論争している。 –