私たちは過去を変えられる〜 Git rebase のスゴさとヤバさ〜

478 Views

May 20, 25

スライド概要

Git rebaseは、ブランチの変更を別のブランチに適用することで履歴を整える有効な方法です。スライドでは、Git rebaseの概要、使用例、必要性、使用タイミング、注意点、そして事故後の復元方法について詳しく説明しています。この技術を正しく使うことで、シンプルで読みやすい履歴を保持しながら、コミットの整理やエラー修正が可能になります。

profile-image

WEB システムを作っています。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

私たちは過去を変えられる 〜 Git rebase のスゴさとヤバさ〜 Tomohiro K 1

2.

自己紹介 Tomohiro K Nintendo Switch2 は 当たりませんでした 2

3.

今日のゴール 適切に Git rebase コマンドを使えるようになる 3

4.

目次 1. Git rebase の概要 2. Git rebase のできること 3. Git rebase の必要性 4. Git rebase の具体的な使用例 5. Git rebase の使用タイミング 6. Git rebase の注意点 7. Git rebase の事故後の復元方法 8. Git rebase のまとめ 4

5.

Git rebase の概要 一方のブランチにコミットされたすべての変更を もう一方のブランチで再現すること リ ベ | ス マ | ジ feature1 C3 C0 C1 C2 feature1 C3’ master feature1 C3 C0 C1 C2 C4 master feature1 ブランチが master ブランチの C2 の変更を取り込む方法 Git - リベース 5

6.

Git rebase のできること 履歴を「まるで最初からそうだったかのように」並べ替えられる feature1 C3 C0 C1 C2 feature1 C3’ master 実際は C1 から feature1 ブランチを作成して C3 をコミットしていたが 最初から C2 の次に C3 をコミットしたかのようにできる 6

7.

Git rebase の必要性 2つのメリットがある シンプルな履歴 コミット整理 7

8.

Git rebase の必要性 | シンプルな履歴 マージコミットがない分 履歴が読みやすくなる リ ベ | ス master C0 C1 C2 C3’ マージコミット マ | ジ C3 C0 C1 C2 feature1 ブランチを master ブランチに取り込んだ後の master ブランチの履歴 master C4 8

9.

Git rebase の必要性 | コミット整理 不要なコミットをまとめたり、コミットメッセージを修正したりすることで レビューしやすくなる feature1 C2 C4 C3 feature1 C0 C1 C2’ C3’ C4’ 不要なコミットをまとめた履歴 9

10.

Git rebase の具体的な使用例 (1/3) feature1 ブランチに 最新の master ブランチで リベースする流れ 最新化したい C2 feature1 feature1 C2’ master C0 C1 git checkout feature1 # リベース対象のブランチに切り替える git rebase origin master # 起点にしたいブランチを指定してリベースする git rebase --continue # 競合が発生した場合は競合を解消後、このコマンドを実行する # Successfully rebased が表示されればリベース成功 コマンド 10

11.

Git rebase の具体的な使用例 (2/3) コミットもれ feature1 ブランチの 1つ前と 2つ前のコミットを 1つにまとめる流れ C0 追いコミット C1 C2 C1’ C2’ C3’ feature1 C3 feature1 git rebase -i HEAD~3 # 現在のコミットを含めて 3つのコミットを変更する pick e618dbf C1 squash 5b26e38 C2 # ファイルが開かれるので 1つ上のコミットとまとめたいコミットを squash に変更する pick 91a454b C3 # 保存後、ファイルを閉じるとコミットメッセージ履歴ファイルが開かれるので、そのまま閉じる(変更も可) # Successfully rebased が表示されればリベース成功 コマンド Git - 歴史の書き換え 11

12.

Git rebase の具体的な使用例 (3/3) 誤字直したい feature1 ブランチの 1つ前の コミットメッセージを 変更する流れ C0 C1 C2 C1’ C2’ feature1 feature1 git rebase -i HEAD~2 # 現在のコミットを含めて 2つのコミットを変更する reword 2d629b3 C1 # ファイルが開かれるのでメッセージを変えたいコミットを reword に書き換える pick b1b6fc4 C2 # 保存後、ファイルを閉じる # コミットメッセージ履歴ファイルが開かれるので、メッセージを変更して保存後、ファイルを閉じる # Successfully rebased が表示されればリベース成功 コマンド 12

13.

Git rebase の使用タイミング 使うべき場面 避けるべき場面 ● 自分の作業ブランチを最新の master や develop ブランチに 追従させたいとき ● すでに他の人と共有している ブランチのとき (履歴が書き換わるとカオスに) ● コードレビューの前に履歴を 整理したいとき ● コンフリクトが大量に発生する 可能性があるとき ( merge のほうが安全) 13

14.

Git rebase の注意点 公開リポジトリにプッシュしたコミットをリベースしてはいけない リベースの動き 問題が発生する流れ Aさんが C1 プッシュ 既存のコミットを破棄して 新たなコミットを作成する ※ 新たなコミットは 破棄したものと似てはいるが別物 Bさんが C1 取得してその上で C2 コミット Aさんがリベースで C1 を書き換えて再度 C1’ 強制プッシュ Bさんが C1’ を再びマージすることになるが プルしようとするとおかしくなってしまう Git - リベース 14

15.

Git rebase の事故後の復元方法 reflog を活用して 万が一のときも戻せるようにする git reflog # 参照ログでリポジトリの更新記録を確認する 91a454b (HEAD -> master, origin/master, origin/HEAD) HEAD@{0}: rebase: blah blah ba7aef2 HEAD@{1}: checkout: moving from feature1 to master # ← 時点の master に戻したい git checkout master git reset --hard ba7aef2 # リベースしたことをなかったことにする (リベースした記録 91a454b ) git push origin master --force # リモートの master にも強制反映させる 共有ブランチ ( master ) でリベースしてしまった人が実行するコマンド 15

16.

Git rebase のまとめ 基本ルールを守りながらリベースを利用する 状況 おすすめ 理由 チーム開発でのブランチ統合 merge 共有ブランチでの事故を防ぐため ローカルブランチの最新化 rebase 履歴がスッキリするため コミットを整理 rebase -i 履歴をクリーンにできるため 16

17.

ご清聴 ありがとうございました 17