ドキュメントには頻繁に更新が加えられ、その都度公開されています。本ページの翻訳はまだ未完成な部分があることをご了承ください。最新の情報については、英語のドキュメンテーションをご参照ください。本ページの翻訳に問題がある場合はこちらまでご連絡ください。
記事のバージョン: GitHub.com

Gitリベースについて

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

通常、git rebaseは以下の目的で使われます。

警告:コミット履歴を変更すると、リポジトリを使う他の人々にとっては難しいことになり得るので、リポジトリにプッシュ済みのコミットをリベースするのは悪いプラクティスと考えられています。 GitHubで安全にリベースする方法を学ぶにはプルリクエストのマージについてを参照してください。

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

他のブランチと現在のブランチの状態との間のすべてのコミットをリベースするには、シェル(Windowsのコマンドプロンプト、あるいはMacやLinuxのターミナル)で以下のコマンドを入力してください。

$ git rebase --interactive other_branch_name

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

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

$ git rebase --interactive HEAD~7

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

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

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

git rebaseの利用例

どのコマンドを使うにしても、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
#
# However, if you remove everything, the rebase will be aborted.
#

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

参考リンク

担当者にお尋ねください

探しているものが見つからなかったでしょうか?

弊社にお問い合わせください