Skip to main content

このバージョンの GitHub Enterprise サーバーはこの日付をもって終了となります: 2026-03-17. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの向上、新機能の向上を図るために、最新バージョンの GitHub Enterprise サーバーにアップグレードしてください。 アップグレードに関するヘルプについては、GitHub Enterprise サポートにお問い合わせください

Git リベースについて

コマンドを使えば、一連のコミットを容易に修正し、リポジトリの履歴を変更できます。 コミットの順序を変更したり、編集したり、一つのコミットにまとめたりできます。

通常、次の用途に使用します。

  • 以前のコミットメッセージの編集
  • 複数のコミットを1つにまとめる
  • 不要になったコミットの削除もしくは打ち消し

警告

コミット履歴を変更すると、リポジトリを使う他の人にとって管理が困難になる場合があるため、リポジトリにプッシュ済みのコミットをリベースするのは推奨されません。 安全にリベースする方法については、「AUTOTITLE」を参照してください。

ブランチに対するコミットのリベース

別のブランチと現在のブランチの状態の間のすべてのコミットをリベースするには、シェルに次のコマンドを入力します (Windowsのコマンド プロンプト、または Mac と Linux のターミナル)。

git rebase --interactive OTHER-BRANCH-NAME

ある時点にコミットをリベースする

現在のブランチの最後のいくつかのコミットをリベースするには、シェルに以下のコマンドを入力してください。

git rebase --interactive HEAD~7

リベースに利用できるコマンド

リベースの際に利用できるコマンドは6つあります。

pick
単にコミットが含まれていることを指します。 コマンドの順序を入れ替えると、リベースの実行中にコミットの順序が変更されます。 コミットを含めないのであれば、行全体を削除してください。
reword
コマンドは に似ていますが、これを使用すると、リベース プロセスが一時停止し、コミット メッセージを変更することができます。 コミットによる変更は影響されません。
edit
コミットを すると、コミットを修正することができます。つまり、コミットを追加し、完全にコミットを変更することができます。 また、リベースを続ける前にさらにコミットをすることもできます。 こうすることで大きなコミットを小さなコミット群に分割したり、コミット中の間違った変更を取り除いたりすることができます。
squash
このコマンドを使うと、2 つ以上のコミットを結合して 1 つのコミットにできます。 コミットは上のコミットにまとめられます。 Git は、どちらの変更についても記述する新しいコミットメッセージを書かせてくれます。
fixup
これは に似ていますが、マージされるコミットのメッセージは破棄されています。 コミットは前のコミットに単純にマージされ、以前のコミットのメッセージが両方の変更の説明として使われます。
exec
このコマンドは、コミットに対して任意のシェルコマンドを実行させてくれます。

使用例

使用するコマンドに関係なく、Git は既定のテキスト エディターを起動し、選択した範囲内のコミットの詳細を示すファイルを開きます。 このファイルは以下のようになります。

pick 1fc6c95 Patch A
pick 6b2481b Patch B
pick dd1475d something I want to split
pick c619268 A fix for Patch B
pick fa39187 something to add to patch A
pick 4ca2acc i cant' typ goods
pick 7b36971 something to move before patch B

# Rebase 41a72e6..7b36971 onto 41a72e6
#
# 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
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

この情報を上から下へ見ていくと、以下のことが分かります。

  • 7つのコミットがリストされており、これは出発点から現在のブランチ状態までに七つの変更があったことを示しています。
  • リベースすることにしたコミットは、古い変更(先頭)から新しい変更(末尾)の順に並べられています。
  • 各行には、コマンド (既定では )、コミット SHA、コミット メッセージが一覧表示されます。 手順全体は、主にこれら 3 つの列の操作に関するものです。 行った変更はリポジトリに リベースされます。
  • コミットの後、Git によって、使用しているコミットの範囲 () が通知されます。
  • 最後に、Gitはコミットをリベースする際に利用できるコマンドについてのヘルプを提供しています。

参考資料

  • 自動タイトル
  • Pro Git ブックの「Git 分岐」の章
  • Pro Git ブックの「対話型リベース」の章
  • リベースを使ってコミットをスカッシュする方法
  • GitHub Desktop ドキュメントの「AUTOTITLE」