4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

リモートリポジトリに含めたくないコミット履歴をgit rebaseコマンドで無に帰す方法

Last updated at Posted at 2018-01-10

概要

__こんな方向け__の記事です。

  • ローカルでの動作確認時にコミットした情報の中に、__リモートリポジトリに含めたくない情報(AWSの認証情報__等)が含まれてしまったorz
  • でも、他にも__大量の修正__をしているからなんとか__問題のコミット履歴だけ__抹消したい
  • git rebase?使ってみようかな。。。(ビクビクッ)

注意

この検証は__リモートにpushをする前__の悪あがきですので、__一度リモートにpushしてしまった場合は当てはまらない__のでご注意ください。

(@Ress さん、ご指摘ありがとうございます!)

手順

前提

以下のような__コミット履歴__があるとします。

command
git log --oneline
624d078 鬼のようなリファクタリング #実装④ リファクタリング時にAWS認証キーは削除
59ef873 動作確認用のコミット #実装③ ここでAWS認証キーをコミットしてしまった!!
c0c2354 物凄い実装 #実装②
aebf9c8 凄まじい実装 #実装①

このまま、

command
git push origin issues/XXX

をしてしまうと、Github上で、

screencapture- 2018-01-10 0.05.18.png

__対象のコミット__を見てみると・・・

screencapture--2018-01-10-0.07.07.png

丸見え!!

__パブリックリポジトリ__でこんなことをする人はいないと思いますが、万が一__やってしまうと場合によっては地獄__をみることになってしまう可能性があります。。。

参考記事:
初心者がAWSでミスって不正利用されて$6,000請求、泣きそうになったお話。

なので、今回はここの部分を__リモートリポジトリに残らない__ように__git rebaseで歴史改ざん__してみましょう♪

コミットログの確認

まずは__ローカルリポジトリ__のコミットログを確認します。

command
git log --oneline
624d078 鬼のようなリファクタリング #1 <- HEAD
59ef873 動作確認用のコミット #2
c0c2354 物凄い実装 #3
aebf9c8 凄まじい実装 #4

今回の事例だと、#1__と#2__をまとめて__#2の歴史を無くせば__よさそう。

command
git rebase -i HEAD~2 #ヘッドから2コミットをまとめる

そうすると__以下__のように

screencapture- 2018-01-10 0.24.09.png

エディターが起動するので、

差分
pick 59ef873 動作確認用のコミット
- pick 624d078 鬼のようなリファクタリング
+ squash 624d078 鬼のようなリファクタリング

のように修正してください。

再度コミットメッセージの入力が求められるので、お好きに変えてください(そのままでも良いです)。

__正常__にrebaseが終わったら再度git log --onelineをすると、

screencapture- 2018-01-10 0.31.14.png

歴 史 改 ざ ん 完 了 ☆

これで再度プッシュすると、

screencapture- 2018-01-10 0.34.18.png

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

screencapture- 2018-01-10 0.34.34.png

ファイルとしても、途中でコミットしてしまった認証情報が入っていませんね。
これで__一安心__!!!

万が一リモートリポジトリにプッシュしてしまった場合

直ちにブランチを削除しましょう!!!

screencapture- 2018-01-10 0.14.16.png

ただし、冒頭でも話しましたが、__リモートにpushしてしまった時はブランチを消しても見られる恐れがあるので、なんにせよ認証情報はgit管理化に入れない__ように__日頃からセキュリティの懸念を意識しながら作業する__に越したことはありません。

(@Ress さん、ご指摘ありがとうございます!)

終わりに

一般的な業務システムは__プライベートリポジトリ__なり__GHE__なりを使っていると思うのでひとまずは大丈夫でしょうが、個人開発__で__パブリックリポジトリ__を使っている方は__今一度気をつけましょう!!

4
6
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?