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

Gitリベースについて

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

ここには以下の内容があります:

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

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

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

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

他のブランチと現在のブランチの状態との間のすべてのコミットをリベースするには、シェル(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.
#

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

  • 7つのコミットがリストされており、出発点から現在のブランチの状態までに7つの変更があったことが示されています。
  • リベースすることにしたコミットは、古い変更(先頭)から新しい変更(末尾)の順に並べられています。
  • 各行にはコマンド(デフォルトではpick)、コミットのSHA、そしてコミットメッセージがリストされています。 git rebaseの全体の手続きは、これらの3つの列の操作を軸として展開されます。 行った変更は、リポジトリにリベースされます。
  • コミット後に、Gitは作業しているコミットの範囲(41a72e6..7b36971)を示します。
  • 最後に、Gitはコミットをリベースする際に利用できるコメントを示すことで多少のヘルプを提供しています。

参考リンク

Did this doc help you?

Privacy policy

Help us make these docs great!

All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request.

Make a contribution

OR, learn how to contribute.