ごきげんよう!今さらPSPのゲームを遊び始めたgonzoです😼
普段、Gitを使っていると、「あ、さっきのコミットにファイル入れ忘れた!」とか「ブランチを更新して作業を続けたいな」と思うことがありませんか?
そんなときに役立つのが Amend(アメンド)コミット と リベース です。
本記事では、非エンジニアの方にも理解できるように、基本的なイメージとSourceTreeでの操作方法をやさしく解説していきます。
Amendコミットとは?
ソフィアちゃん
やった~!コミット完了しました!……って、あれ、ファイル一個忘れてたけど、まあ次のコミットで入れればいいですよね!😅
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での操作方法
- 修正したファイルをステージに追加
- コミット画面で 「最後のコミットを修正(Amend)」 にチェックを入れる
- コミットメッセージを直す or そのままにしてコミット

コミットボタンのすぐ近くにあります
これで前回のコミットに上書きされます。
プッシュ済みのブランチに対してAmendコミットした時は、強制プッシュをしないといけなくなるので注意しましょう。
リベースとは?
ソフィアちゃん
gonzoさんのブランチを元に作った機能が完成しました!🎊このままmainにマージしちゃえばいいですよね!😆
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での操作方法
sophia
ブランチをチェックアウト
- 対象ブランチ(例:
gonzo
)を右クリック
- メニューから 「現在の変更を gonzo にリベース」 を選択
- 競合があれば解消して進める
- その後、
gonzo
へのマージを実施して動作確認

リベース元のブランチはリモートと同期して最新の状態にしましょう
gonzo
リベースの途中でコンフリクトしたら解消してすすめていくニャ。間違えたら中止してやりなおすこともできるニャー。
Amendと同様に、プッシュ済みのブランチをリベースした時も、強制プッシュが必要になるので注意しましょう。
おわりに
今回紹介した機能は、どちらも「履歴をきれいにする」ための道具ですが、
- Amendは直前のコミットをちょっと直したいとき
- リベースは最新の変更を取り込んで作業を進めたいとき
に使い分けるとよいでしょう。
gonzo
実はリベースはコミットを自由に操れるすごい機能なんだニャ。使いこなせれば過去のコミットを改変、統合、並び替えなどが自在にできるようになるニャー
Gitは難しく思えるかもしれませんが、ちょっとした工夫で履歴を見やすく整理できます。
SourceTreeならクリック操作で実行できるので、慣れてしまえばとても簡単です。
かしこい使い方を覚えて作業を円滑に進められるようにしましょう!
おしまい