はじめに
こんにちは!
社会人一年目の石川です。
記事をご覧いただきありがとうございます。
本記事では、リモートのブランチをローカルにrebaseし、コミット履歴を整理する操作を行ったので、その具体的な方法についてまとめます。
目次
rebaseの使い方
Gitのrebaseコマンドは、コミット履歴を整理するための強力なツールです。特にPRを出した後、不要なコミットが混じってしまったときに、rebaseを使って履歴をきれいにすることができます。
まず、rebaseの基本的な使い方を説明します。rebaseは、指定したブランチやコミットから現在のブランチまでの履歴を、他のブランチに適用することで、内容を上書きするコマンドです。
リモートのトピックブランチをrebaseする
まずは、リモートのトピックブランチをローカルにrebaseする手順を振り返ります。
ここではリモートのAブランチをローカルのBブランチにrebaseする手順を詳しく説明します。
git fetch origin # リモートリポジトリから最新の情報を取得
git checkout B # トピックブランチに切り替え
git rebase origin/A # リモートのAブランチの最新の変更をローカルのBブランチに適用
これによって、Bブランチが最新のAブランチの内容を取り込みながら開発を続けることが可能になります。
rebase -i コマンド
リベース後に、Bブランチ上のコミットがAブランチのコミットに続いて並びますが、この時点でコミット履歴を整理することで、より見やすく、理解しやすい履歴にすることが可能です。
コミットのハッシュ値を確認する
まず、コミットのハッシュ値を確認します。git log
コマンドを使用してコミット履歴を表示し、目的のコミットを見つけます。
git log --oneline
出力例:
a1b2c3d 最新のコミットメッセージ
e3a1b35 ひとつ前のコミットメッセージ
7ac9a67 目的のコミットメッセージ
1d2a3f4 その他のコミットメッセージ
インタラクティブリベースの開始
git rebase -i
の後にハッシュ値を指定します。ここで、7ac9a67
のコミットを基点としてrebaseを開始したい場合、次のようにコマンドを実行します。
git rebase -i e3a1b35
これにより、7ac9a67
コミット 以降 のコミットがエディタに表示され、編集できるようになります。もし7ac9a67
を含めて編集したい場合は、その一つ前のコミットハッシュを使用します。
補足:
git rebase -i e3a1b35^
ハッシュの最後に^
をつけることで、e3a1b35
の親コミットから始まるすべてのコミットがリストに表示され、リベースの対象となります。
エディタでの操作
エディタが開かれると、リベースするコミットがリストアップされ、各コミットの前に pick というキーワードがついています。ここで pick を他のオプション(edit、drop、squash など)に変更して、各コミットに対する操作を指定します。
pick
: コミットをそのまま使用
drop
: コミットを履歴から削除
pick e3a1b35← このコミットは編集の対象外
drop 7ac9a67 目的のコミットメッセージ
pick e3a1b35 ひとつ前のコミットメッセージ
pick a1b2c3d 最新のコミットメッセージ
コミットの行を編集して、「pick」を「drop」に変更することで、特定のコミットを履歴から削除することができます。変更を適用したい操作に応じて、適切なキーワードを使用して行を編集します。
もしエディタがインサートモードでない場合、テキストの編集を行うには i を押してインサートモードに切り替えます。
完了後のプロセス
エディタで必要な変更を加えた後、ファイルを保存してエディタを閉じます。
vimの場合は、ESCキーを押してコマンドモードに切り替え、:wq
と入力してEnterを押すと保存して終了します。
リベースのプロセス中にコンフリクトが発生した場合は、手動で解決します。もしリベースを中止したい場合は、git rebase --abort
を実行します。
リベースが完了したら、git log
を使用して、コミット履歴が意図した通りになっていることを確認します。これにより、無意識のエラーや、間違ったコミットの操作がなかったかをチェックできます。
リモートにプッシュ
rebase後の変更をリモートブランチに反映させるためには、通常のgit push
を実行しますが、rebaseなどでコミット履歴が変更されている場合、リモートリポジトリの履歴と異なるため、強制的にプッシュ(--forceオプションを使用)する必要があります。強制プッシュを行う前には、関連する開発者に通知し、問題が発生しないように協力を求めることが望ましいです。
git push origin <branch-name> -f
最後に
最後まで読んでいただきありがとうございました。
この記事を読んでGitのrebaseを使ったコミット履歴の整理方法について理解が深まれば幸いです。