なんちゃってウェブ系エンジニアの備忘録

某IT企業で働くなんちゃってウェブ系エンジニアが技術やデザインなど役に立ちそうなものなどを備忘録として載せていきます

GItの履歴を改ざんする

Gitの履歴を改ざんするって、表現的に悪いイメージが見えますが
例えば、あるファイルの内容をタイプミスしてコミットした後、そのミスに気が付き
修正後、再度コミットするというケースはよくあるかと思います。

このようなコミットは履歴として残したくない場合は、「git rebase」コマンドを利用することで解決できます。

$ git rebase -i HEAD~2

上記は、現在のブランチのHEADを含めた2つまでの歴史を対象として以下のような
エディタが立ち上げられます。

pick XXXX01 タイプミスを修正
pink XXXX02 タイプミスしてしまったよ
以下省略

ハッシュ「XXXX02」の行に対し、「pick」という個所があるかと思います。
それを「fixup」に書き換えます。そうすることで2つのコミットが1つのコミットとして扱われます。
ちなみに「pick」は何もしないという意味になります。

pick XXXX01 タイプミスを修正
fixup XXXX02 タイプミスしてしまったよ
以下省略

「git rebase」を使うと、最新のコミットから指定したコミットまでの歴史を対話式に改変することができます。具体的には以下のことができます。
具体的には…

pick

何もしない。現在の状態をそのまま保つ。

reword

コミットメッセージを編集する。

squash

1つ前のコミットと合体させる。

fixup

基本としてはsquashとほぼ同じだが、コメントは1つ前のコメントが採用される。

この辺については使い方も含めて、時間があればまとめておきたいと思います。
また、コミットのメッセージを修正したい場合は以下のコマンドで修正することができます。

$ git commit --amend

上記のコマンドを実行することで、エディタが立ち上げられ、直近コミットしたメッセージが表示されます。
そのメッセージを修正して保存します。