ksaitoの日記

日々試したことの覚え書き

gitで過去のコミットを書き換える

gitの最初のcommitにパスワードを書き込んでpushしたとします。さらに、しばらくcommit/pushを繰り返したとします。

下記の手順でパスワードを全てマスクした文字に書き換える事ができますが、cloneして作業している人すべてに影響がでるので作業前には関係者への連絡と準備が必須です。

事前確認

ブランチがクリーンなことを確認します。

$ git status
ブランチ master
nothing to commit, working tree clean
$

下記のようにpasswordが含まれているファイルをを確認します。

$ git grep password
file.txt:password
$

書き換え

filter-branch--tree-filterオプションで各コミットに実行するコマンドを指定します。 確認したfile.txtsedで書き換えます。

$ git filter-branch -f --tree-filter "sed -i -e 's/password/mask/' file.txt" HEAD
Rewrite c5974de297ec5360d0dfce499abccc3073ba0211 (2/2) (0 seconds passed, remaining 0 predicted)
Ref 'refs/heads/master' was rewritten
$

確認

下記の通りpasswordは、消えて…

$ git grep password
$

maskになっています。

$ git grep mask
file.txt:mask
$

以上