履歴を扱う — rebase・stash・tag・cherry-pick
すでに作った履歴に手を入れる技術です。強力な分、絶対に破ってはいけない黄金律がひとつ付いてきます。
学習目標
- 対話的 rebase で自分の履歴を整理できる
- 作業中のものを一時的にしまい、後で戻せる
- tag でリリース地点を示し、cherry-pick でコミットを1つだけ持ってこられる
ここからはすでに作った履歴に手を入れる技術です。git rebase は自分のコミットを別のコミットの上に移し替え、履歴を一直線に整理します。merge が「事実そのまま」を残すなら、rebase は「読みやすく」整えます。-i(対話的)を付ければ、公開する前にコミットをまとめたり、メッセージを直したり、順序を変えたりできます。
黄金律はただ1つです。**すでに他人と共有したコミットは rebase しない。** rebase はコミットを新しく作って差し替えるため、他人がそのコミットの上で作業していた場合、履歴が分かれて収拾がつかなくなります。自分のブランチで PR を上げるまでは自由に使い、それ以降は使わないでください。
git stash は今やっている作業を一時的に棚に置く命令です。急ぎのバグ対応が入って今すぐブランチを替えなければならないときに使います。git tag は特定のコミットに v1.0.0 のような名札を付け、リリースしたコードを正確に探せるようにします。git cherry-pick は別のブランチのコミットを1つだけ選んで今のブランチに持ってきます。3つとも「全部ではなく一部だけ」を扱う道具です。
このステップで覚えるコマンド
目で読むだけでなく、実際にターミナルで打ってみてください。手が覚えて初めて実務で出てきます。
git rebase -i HEAD~3- 直近3つのコミットを対話的に整理します。まとめる・メッセージ修正・順序変更。
git stash push -m "작업 중"- 今の変更をメモ付きでしまい、すぐブランチを替えられるようにします。
git tag -a v1.0.0 -m "첫 배포"- このコミットをリリース地点として印を付けます(説明付きタグ)。
git cherry-pick <commit>- 別のブランチのコミットを1つだけ今のブランチに持ってきます。