概要
__こんな方向け__の記事です。
- ローカルでの動作確認時にコミットした情報の中に、__リモートリポジトリに含めたくない情報(AWSの認証情報__等)が含まれてしまったorz
- でも、他にも__大量の修正__をしているからなんとか__問題のコミット履歴だけ__抹消したい
- git rebase?使ってみようかな。。。(ビクビクッ)
注意
この検証は__リモートにpushをする前__の悪あがきですので、__一度リモートにpushしてしまった場合は当てはまらない__のでご注意ください。
(@Ress さん、ご指摘ありがとうございます!)
手順
前提
以下のような__コミット履歴__があるとします。
git log --oneline
624d078 鬼のようなリファクタリング #実装④ リファクタリング時にAWS認証キーは削除
59ef873 動作確認用のコミット #実装③ ここでAWS認証キーをコミットしてしまった!!
c0c2354 物凄い実装 #実装②
aebf9c8 凄まじい実装 #実装①
このまま、
git push origin issues/XXX
をしてしまうと、Github上で、

__対象のコミット__を見てみると・・・
丸見え!!
__パブリックリポジトリ__でこんなことをする人はいないと思いますが、万が一__やってしまうと場合によっては地獄__をみることになってしまう可能性があります。。。
参考記事:
初心者がAWSでミスって不正利用されて$6,000請求、泣きそうになったお話。
なので、今回はここの部分を__リモートリポジトリに残らない__ように__git rebaseで歴史改ざん__してみましょう♪
コミットログの確認
まずは__ローカルリポジトリ__のコミットログを確認します。
git log --oneline
624d078 鬼のようなリファクタリング #1 <- HEAD
59ef873 動作確認用のコミット #2
c0c2354 物凄い実装 #3
aebf9c8 凄まじい実装 #4
今回の事例だと、#1__と#2__をまとめて__#2の歴史を無くせば__よさそう。
git rebase -i HEAD~2 #ヘッドから2コミットをまとめる
そうすると__以下__のように

エディターが起動するので、
pick 59ef873 動作確認用のコミット
- pick 624d078 鬼のようなリファクタリング
+ squash 624d078 鬼のようなリファクタリング
のように修正してください。
再度コミットメッセージの入力が求められるので、お好きに変えてください(そのままでも良いです)。
__正常__にrebaseが終わったら再度git log --oneline
をすると、

歴 史 改 ざ ん 完 了 ☆
これで再度プッシュすると、

コミットログも消えています。

ファイルとしても、途中でコミットしてしまった認証情報が入っていませんね。
これで__一安心__!!!
万が一リモートリポジトリにプッシュしてしまった場合
直ちにブランチを削除しましょう!!!

ただし、冒頭でも話しましたが、__リモートにpushしてしまった時はブランチを消しても見られる恐れがあるので、なんにせよ認証情報はgit管理化に入れない__ように__日頃からセキュリティの懸念を意識しながら作業する__に越したことはありません。
(@Ress さん、ご指摘ありがとうございます!)
終わりに
一般的な業務システムは__プライベートリポジトリ__なり__GHE__なりを使っていると思うのでひとまずは大丈夫でしょうが、個人開発__で__パブリックリポジトリ__を使っている方は__今一度気をつけましょう!!