Gitのcommitをまとめる必要性
業務でGitやGithubを使用してチーム開発を行う際は特に、プルリクエストを作成する前にcommitをまとめる必要になる場合がある。
理由としては自分以外の人がブランチやコミットからコードの変更内容を確認する際にコミットがバラバラになっていたりすると、内容を追いづらいためです。例えば....
"ユーザー登録機能の作成"
というコミットの後に連続して
"ユーザー登録画面のレイアウトの修正"
というコミットを実行する場合、主な修正としては「ユーザー登録機能の作成」の方になり、その後コミットした「レイアウトを少し修正した」というコミットは「ユーザー登録機能の作成」コミットに付随する軽い修正ということになるので、自分以外の人から見た場合にあまり重要ではありません。
このような状況ではコミットメッセージをまとめた方が良い場合があります。
"ユーザー登録画面のレイアウトの修正"
というコミットを行わず、その直前のコミットにまとめたいので、
git commit --amend
コマンドを実行するとviエディタでコミットメッセージを編集する画面が立ち上がるので、今回はそのまま変更せずに:wqコマンドなどで終了します。
git log
コマンドでコミット履歴を確認すると、"ユーザー登録画面のレイアウトの修正"というコミットメッセージが消えて、"ユーザー登録機能の作成"のコミットメッセージが残って、かつ"ユーザー登録画面のレイアウトの修正"で変更したレイアウトの変更も反映されている状態になります。
注意点として今回の方法は直前のコミットにまとめる方法であり、3つ以上のコミットを同時に1つのコミットにまとめたい場合は
git rebase -i HEAD
コマンドを使用することになります。
git commit --amend
を実行する際には現在のブランチをgit branchコマンドなどでしっかり確認した方が安全で誤って他のブランチで実行したりすると他のブランチのコミットが壊れるので要注意です。その場合は
git reset --soft HEAD@{1}
コマンドを実行すればgit commit --amendを取り消すことが出来ます。
もしくはgit commit --amendでviエディタが立ち上がっている時であれば、viエディタで編集するコミットメッセージを全て削除すればgit commit --amendを中止出来ます。
しかしいずれにしろ、git commit --amendのように他の他のコミットにも影響を与えるGitコマンドを実行する際には細心の注意を払うべきであり、最悪、ブランチを切り直して作業のやり直しになる可能性もあるので、コマンド実行前にはgit diffやgit statusで変更内容をしっかり確認することが重要になります。