[メモ] git replaceを使用した疑似的なマージ
管理者が突然、Gitの過去のコミット履歴を削除し、新しいコミット履歴を開始することに決めたとしよう。
つまり、以下の図のように、コード内容の繋がりはあるが、Gitのツリー上では繋がりのない旧ブランチoldと新ブランチmainが作成されることになる。この場合、共通の親は無いので新ブランチmainからはファイルの履歴を辿るのが難しくなる。
このとき、git replace コマンドを使うことで、ローカル上では疑似的にマージされた状態に出来る。
例えば、コミット4と5が同じであれば、
git replace 5 4
と実行すると、
のようにローカル環境では疑似的に表示される。
また、同じコミットが存在しない場合でも
git replace --graft 3 4
のように実行することで、ローカル環境では以下のように疑似的にマージしたかのように表示させることが出来る。
参照
マージから失われた2番目の親を復元する #Git - Qiita
https://qiita.com/tetsurom/items/ee89b80e64b8840857a4Git - Git オブジェクトの置き換え
Git - git-replace Documentation
https://git-scm.com/docs/git-replace
備考
- 初出時は「git update」と記載していましたが間違いです。申し訳ございません。(2025/3/9)