Git Rebase
最終更新
git rebase はブランチのコミットを移動して別のブランチの上に再適用し、マージコミットではなくまっすぐで線形な履歴を作ります。インタラクティブリベース (-i) はさらに一歩進んで、コミットのスカッシュ、並べ替え、編集、削除を可能にします。リベースはコミットを書き換えるため、まだ共有していない作業に対してのみ行ってください。
これらをターミナルプレイグラウンドで試してみましょう。ブラウザ内の本物のシェルで、インストールは不要です。
構文
| Command | What it does |
|---|---|
git rebase main | あなたのコミットを main の上に再適用する |
git rebase -i HEAD~3 | 直近の3つのコミットをインタラクティブに編集する |
git rebase --onto main old new | コミットの範囲を main の上に移動する |
git rebase --continue | コンフリクトを解決した後に再開する |
git rebase --abort | リベースを取り消し、ブランチを復元する |
git pull --rebase | マージの代わりにプルとリベースを行う |
インタラクティブリベースのキーワード
-i が開くエディタで、pick をこれらのいずれかに変更します。
| Keyword | What it does |
|---|---|
pick | コミットをそのまま残す |
reword | コミットを残し、メッセージを編集する |
squash | 前のコミットに統合し、メッセージをまとめる |
fixup | 統合するが、このメッセージは破棄する |
drop | コミットを完全に削除する |
git rebase のよくある質問
git rebase は何をしますか?
現在のブランチのコミットを取り出し、そのブランチの最新コミットから作業を始めたかのように、別のブランチの上に1つずつ再適用します。その結果、マージコミットのない線形な履歴になります。この過程でコミットは書き換えられます(新しいハッシュが付与されます)。
インタラクティブリベースとは何ですか?
git rebase -i <base> は <base> 以降のコミットを一覧表示するエディタを開き、そこでコミットを並べ替えたり、複数を1つに squash したり、メッセージを reword したり、コミットを edit したり、drop したりできます。共有する前に乱雑なコミット列を整理するための主要なツールです。リベースの黄金律とは何ですか?
他の人がすでに作業の基礎としているコミット、通常は共有ブランチにプッシュされたものは、決してリベースしないでください。リベースはコミットを書き換えるため、そうすると他の全員が分岐した履歴を調整させられます。ローカルの未プッシュのコミットは自由にリベースし、公開されたものには merge や revert を使ってください。
コンフリクトのあるリベースを修正または中止するにはどうすればよいですか?
リベースがコンフリクトで停止したら、ファイルを解決し、それらを
git add してから git rebase --continue を実行します。現在のコミットを破棄するには git rebase --skip を、完全に中止してブランチをリベース開始前の状態に戻すには git rebase --abort を使います。これをオンラインで練習できますか?
はい。ターミナルプレイグラウンドを開けば、ブラウザ内の本物のシェルで
git rebase を実行できます。インストールは不要です。Coddy の無料インタラクティブ Git コースでもリベースを段階的に扱っています。