Git のコミットログを消したい

Git のコミットログを消して first commit だけにしたいときの方法のメモ。

たぶんやり方はいろいろある。例えばこれ。

これとはまた別の方法をやってみる。

コミットログを確認する。

※ l にエイリアスが設定済み (l=log --graph -n 20 --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %s %C(green)- %an, %cr%Creset')

$ git l   
* 749c2fc (HEAD -> main, origin/main) fix: tfsec指摘に対応 - Hoge Fuga, 2 days ago
* b0eab15 feat: update eks cluster version - Hoge Fuga, 4 days ago
* 526e31b fix: update providers - Hoge Fuga, 4 days ago
* 34abb1b README を更新 - Hoge Fuga, 4 days ago
* fce9484 fix: 不要な変数などを削除 - Hoge Fuga, 9 days ago
* dc9c4d8 fix: コンテナイメージ名を変数化 - Hoge Fuga, 9 days ago
* 77d9c05 fix: fsxnディレクトリの移動 - Hoge Fuga, 9 days ago
* 04ca890 fix: コードのブラッシュアップ - Hoge Fuga, 9 days ago
* 0c2eda1 feat: Container Insights用のADOTコレクター - Hoge Fuga, 9 days ago
* b37f69e feat: Datadogのlogエンドポイントを追加 - Hoge Fuga, 10 days ago
* 7fe4a30 feat: 各種アドオンの追加 - Hoge Fuga, 11 days ago
* f88865d Managed Grafanaを追加 - Hoge Fuga, 11 days ago
* 210b03f FSx for ONTAPを追加 - Hoge Fuga, 11 days ago
* c29804e feat: Datadog用VPCを追加 - Hoge Fuga, 11 days ago
* 8d21659 feat: Cloud9 用 IAM ロールを追加 - Hoge Fuga, 2 weeks ago
* 40e2660 first commit - Hoge Fuga, 2 weeks ago

最初のコミットの時点に戻す。ただし --soft とすることで、ファイルは元のままにする。

git reset --soft 40e2660

コミットログを確認する。最初のコミットに戻されている。

$ git l     
* 40e2660 (HEAD -> main) first commit - Hoge Fuga, 2 weeks ago

状態を確認する。変更のあったファイルがステージングされた状態になっている。

$ git status              
On branch main
Your branch is behind 'origin/main' by 15 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   README.md
        new file:   cfn/terraform-backend.yaml
        new file:   environments/addons/.terraform.lock.hcl

(省略)

直前のコミットにファイルを追加する。

$ git commit --amend --no-edit
The following files have been added, modified, moved, or removed:
********************************************************************

M       README.md
A       cfn/terraform-backend.yaml
A       environments/addons/.terraform.lock.hcl

(省略)

これで OK。

$ git l                       
* 5b8d4fb (HEAD -> main) first commit - Hoge Fuga, 9 minutes ago

force push する。

$ git push -f            
You are pushing to the remote origin at codecommit::ap-northeast-1://terraform-fully-private-eks
Enumerating objects: 168, done.
Counting objects: 100% (168/168), done.
Delta compression using up to 10 threads
Compressing objects: 100% (150/150), done.
Writing objects: 100% (168/168), 88.96 KiB | 5.93 MiB/s, done.
Total 168 (delta 46), reused 0 (delta 0), pack-reused 0
remote: Validating objects: 100%
To codecommit::ap-northeast-1://terraform-fully-private-eks
 + 749c2fc...5b8d4fb main -> main (forced update)