Git 技術

Gitのコミットをマージする前にまとめる(初心者用)

概要

この記事はGitでの開発初心者を対象にした記事です。

まず、なぜコミットをまとめる必要があるのか?

簡潔に答えると、マスターブランチの更新履歴を管理しやすくするためである。

コミットとは修正を確定した時にその時点の情報を記憶し、管理することができます。
問題が発生した時、修正前(過去のコミット時)の状態に戻ることも可能です。
チームで開発を行う場合は知っておいたほうがよいでしょう。

コミットをまとめるとは?

例えば以下のように開発ブランチとマスターブランチがあったとします。

開発ブランチの修正を何も考えずにマージ(取り込み)を行うと、以下のようになります。

これだと見にくい(醜い)ので、

開発ブランチのコミットを以下のように纏めます。

これでマージを行えば、マスターの履歴も綺麗になり、バグが発生したときに

いつ時点のコミットに戻ればいいのか分かりやすくなります。

Gitでのコマンド

複数のコミットを一つに纏めるためのGitコマンドを紹介します。

  1. マージ先のブランチ情報を取り込む
    git fetchでリモートから最新の情報をローカルへDownloadし、
    git pull --rebaseを行う。

    [miyahuji]$ git fetch

    [miyahuji]$ git pull --rebase origin ブランチ名

    () git pull --rebase origin develop

  2. コミットのログを確認
    git log --oneline コマンドでコミットのログを確認する。

    【実行結果】

    [miyahuji]$ git log --oneline

    1aea940 試作版作成

    2c07c03 バグ対応

    3309d00 送信機能実装

    4b4b2e1 バグ対応

  3. コミットをまとめる

    git rebase -i HEAD~5 コマンドを利用し、複数回コミットした結果を1個にまとめましょう。

    ※末尾の数字は表示するコミット履歴の件数です。今回は4コミットのため、

     余裕をもって 5 を指定します。

     

    (3-1)コマンドを実行

    [miyahuji]$ git rebase -i HEAD~5

    pick 1aea940 試作版作成
    pick 2c07c03 バグ対応
    pick 3309d00 送信機能実装
    pick 4b4b2e1 バグ対応

    # Rebase xxxxx...xxxxxxx...xxxxxx
    #
    # Commands:
    #  p, pick = use commit
    #  r, reword = use commit, but edit the commit message
    #  e, edit = use commit, but stop for amending
    #  s, squash = use commit, but meld into previous commit
    #  f, fixup = like "squash", but discard this commit's log message
    #  x, exec = run command (the rest of the line) using shell

    (3-2)コミット履歴を修正

    コマンドを実行したら I (編集モード)を入力し、 pickf or fixup にする。
    f (fixup)は1個前のコミットに修正を統合するという意味。

    そのため、一番最初のpickを残し、新しいものから f に書き換えれば良い。

    【例:修正後イメージ】

    [miyahuji]$ git rebase -i HEAD~5

    pick 1aea940 試作版作成

    f 2c07c03 バグ対応

    f 3309d00 送信機能実装

    f 4b4b2e1 バグ対応

    変更が完了したら[Esc]で編集モードを抜け、":wq"で保存して、終了する。

  4. コミットのコメントを修正する。

    コマンド「git commit --amend」を使い、直近のコミットコメントを変更する。

    先ほど、コミットを纏めたので、pickを指定したコミットコメントが表示される。

    【実行結果】

    [miyahuji]$ git commit --amend

    試作版作成

    Author: miyahuji <miyahuji@example.com>

    2 files changed, 171 insertions(+), 5 deletions(-)

     I (編集モード)を入力し、変更が完了したら[Esc]で編集モードを抜け、":wq"で保存して、終了する。

  5. pushを行い、マスターへのマージを依頼する(完了)
    【実行コマンド】

    git push -u -f origin develop

    オプションの補足説明

    -f は強制push コミットを纏めた場合、通常のpushは通らないと思ったほうがいい。

    -u は一度-uで実行した後は「git push」だけでpushできるようになる。

    指定しなくてもよい。

-Git, 技術