PC活用術

【ざっくり解説】Gitのコミットを整理しよう

PC活用術
この記事は約9分で読めます。

ごきげんよう!今さらPSPのゲームを遊び始めたgonzoです😼
普段、Gitを使っていると、「あ、さっきのコミットにファイル入れ忘れた!」とか「ブランチを更新して作業を続けたいな」と思うことがありませんか?
そんなときに役立つのが Amend(アメンド)コミットリベース です。
本記事では、非エンジニアの方にも理解できるように、基本的なイメージとSourceTreeでの操作方法をやさしく解説していきます。

Amendコミットとは?

ソフィアちゃん
ソフィアちゃん
やった~!コミット完了しました!……って、あれ、ファイル一個忘れてたけど、まあ次のコミットで入れればいいですよね!😅
gonzo
gonzo
それだと履歴が余計に増えるニャ-。直前のコミットにまとめたいならAmendを使うといいニャ。そうすれば1つ前のコミットに修正を加えられるニャ-。

概要

Amendコミットは「直前のコミットを修正する」機能です。
例えば「コミットした後に誤字に気づいて直した!」という場合に、わざわざ新しいコミットを追加しなくても、前のコミットに上書きしてしまえます。

イメージ図

--- config: theme: 'base' themeVariables: commitLabelFontSize: '14px' --- gitGraph commit id: "修正前" commit id: "コミット" commit id: "直前のコミット" commit id: "修正ファイルを追加" type: HIGHLIGHT

これがAmendをすると……

--- config: theme: 'base' themeVariables: commitLabelFontSize: '14px' --- gitGraph commit id: "修正前" commit id: "コミット" commit id: "直前のコミット(修正済み)" type: HIGHLIGHT

1つにまとまって、履歴がスッキリします。

Amendコミットを使うべきケース

  • コミットメッセージの誤字修正
  • ファイルを入れ忘れたときの追加
  • 「この変更は同じコミットにまとめた方がわかりやすい」という場合

SourceTreeでの操作方法

  1. 修正したファイルをステージに追加
  2. コミット画面で 「最後のコミットを修正(Amend)」 にチェックを入れる
  3. コミットメッセージを直す or そのままにしてコミット
SourceTreeでのAmendコミット

コミットボタンのすぐ近くにあります

これで前回のコミットに上書きされます。

プッシュ済みのブランチに対してAmendコミットした時は、強制プッシュをしないといけなくなるので注意しましょう。

リベースとは?

ソフィアちゃん
ソフィアちゃん
gonzoさんのブランチを元に作った機能が完成しました!🎊このままmainにマージしちゃえばいいですよね!😆
gonzo
gonzo
それだと途中で大きなコンフリクトが出る可能性があるニャ。mainにマージする前にリベースしてから、分岐元へマージする方がコンフリクトを事前に解消できて安全だニャ-。

概要

リベースは「コミットの並び替え・整理をする」機能です。
特に「main以外のブランチ(例:gonzo)で進んだ変更を取り込みたい」ときに有効です。
マージでも同じことはできますが、マージだと余分な「マージコミット」が増え、履歴が複雑になります。
リベースを使うと、自分の作業がgonzoの最新の上に積み重なったように整理されます。

リベース前の状態

sophiaブランチがgonzoブランチから分岐して作業を進めている状況です。
その後gonzo 3コミットが追加されたので、sophiaは古いコミットから分岐した形になっています。

--- config: theme: 'base' themeVariables: commitLabelFontSize: '14px' --- gitGraph commit id: "main 1" commit id: "main 2" branch gonzo commit id: "gonzo 1" commit id: "gonzo 2" branch sophia commit id: "sophia 1" commit id: "sophia 2" checkout gonzo commit id: "gonzo 3"

このままmainにマージすると、gonzo 2以降との違いで大きなコンフリクトが発生する可能性があります。
例えば下記の図のような場合、gonzoの担当者が経緯を把握していなかった場合、知らずにsophiaでの作業を上書きしてしまう恐れすらあります。

--- config: theme: 'base' themeVariables: commitLabelFontSize: '14px' --- gitGraph commit id: "main 1" commit id: "main 2" branch gonzo commit id: "gonzo 1" commit id: "gonzo 2" branch sophia commit id: "sophia 1" commit id: "sophia 2" checkout gonzo commit id: "gonzo 3" checkout main merge sophia merge gonzo type:REVERSE

リベース後の状態

ここでリベースの登場です。
sophiaを最新のgonzoにリベースすると、変更がgonzo 3コミットを起点に並び直されます。

--- config: theme: 'base' themeVariables: commitLabelFontSize: '14px' --- gitGraph commit id: "main 1" commit id: "main 2" branch gonzo commit id: "gonzo 1" commit id: "gonzo 2" commit id: "gonzo 3" branch sophia commit id: "sophia 1 (rebased)" commit id: "sophia 2 (rebased)"

履歴が整理され、差分がわかりやすくなりますね。

mainにマージする前の工夫

さらに、いきなりmainへマージするのではなく、一度gonzoへマージしておくと安全です。

--- config: theme: 'base' themeVariables: commitLabelFontSize: '14px' --- gitGraph commit id: "main 1" commit id: "main 2" branch gonzo commit id: "gonzo 1" commit id: "gonzo 2" commit id: "gonzo 3" branch sophia commit id: "sophia 1 (rebased)" commit id: "sophia 2 (rebased)" checkout gonzo merge sophia checkout main merge gonzo

こうしておけば、mainに統合するときに大きなコンフリクトが出にくくなり、作業がスムーズになります。
もしもgonzoが先にmainにマージされた場合は、mainにリベースすることで、他のブランチが途中に介入してきたことによるコンフリクトを解消する際も状況整理がしやすくなります。

--- config: theme: 'base' themeVariables: commitLabelFontSize: '14px' --- gitGraph commit id: "main 1" commit id: "main 2" branch gonzo commit id: "gonzo 1" commit id: "gonzo 2" commit id: "gonzo 3" checkout main branch nakamura commit id: "nakamura 1" checkout main merge gonzo merge nakamura branch sophia commit id: "sophia 1 (rebased)" commit id: "sophia 2 (rebased)" checkout main merge sophia

リベースを使うべきケース

  • main以外のブランチから分岐していて、分岐元ブランチの変更を取り込みたいとき
  • 作業を続ける前に最新の状態にしておきたいとき
  • mainにマージする前に、段階的にコンフリクトを解消しておきたいとき

特にプルリクエストを出す前には、リベースして最新の基準ブランチに追従し、問題なく動作するか確認する習慣をつけておくと良いです。
これにより「レビュー時に突然大きなコンフリクトが出て進まない」という事態を避けられます。

ソフィアちゃん
ソフィアちゃん
日頃から作業を続ける前に最新の状態を確認することが大事ですねっ!

SourceTreeでの操作方法

  1. sophiaブランチをチェックアウト
  2. 対象ブランチ(例:gonzo)を右クリック
  3. メニューから 「現在の変更を gonzo にリベース」 を選択
  4. 競合があれば解消して進める
  5. その後、gonzoへのマージを実施して動作確認
SourceTreeでのリベース

リベース元のブランチはリモートと同期して最新の状態にしましょう

gonzo
gonzo
リベースの途中でコンフリクトしたら解消してすすめていくニャ。間違えたら中止してやりなおすこともできるニャー。
Amendと同様に、プッシュ済みのブランチをリベースした時も、強制プッシュが必要になるので注意しましょう。

おわりに

今回紹介した機能は、どちらも「履歴をきれいにする」ための道具ですが、

  • Amendは直前のコミットをちょっと直したいとき
  • リベースは最新の変更を取り込んで作業を進めたいとき

に使い分けるとよいでしょう。

gonzo
gonzo
実はリベースはコミットを自由に操れるすごい機能なんだニャ。使いこなせれば過去のコミットを改変、統合、並び替えなどが自在にできるようになるニャー

Gitは難しく思えるかもしれませんが、ちょっとした工夫で履歴を見やすく整理できます。
SourceTreeならクリック操作で実行できるので、慣れてしまえばとても簡単です。
かしこい使い方を覚えて作業を円滑に進められるようにしましょう!

おしまい

タイトルとURLをコピーしました