HOWTO · Git
コマンド ラインで Git Rebase を使用する
この記事では、git rebase コマンドを効果的に使用するプロセスについて説明します。
この記事では、git rebase コマンドを効果的に使用する方法について説明します。 git rebase コマンドを使用すると、一連のコミットを変更し、リポジトリ内のコミット履歴を変更できます。
git rebase コマンドを使用して、コミットを編集、並べ替え、またはスカッシュできます。
コマンドラインで git rebase を使用
一般的な使用方法のオプションを次に示します。
- 以前のコミット メッセージを編集できます。
- 2つ以上のコミットを 1つに結合できます。
- リポジトリ内の不要なコミットを元に戻すか削除できます。
リベースするときは、ブランチまたはリポジトリ内の特定の時点に対してリベースできます。
ブランチに対してリベースするには、次を実行します。
$ git rebase --interactive <branch_name>
特定の時点に対してリベースするには、次を実行します。
$ git rebase --interacive HEAD~
HEAD~7 を追加して、7つ目のコミットまでリベースできます。
リベース中に使用可能なコマンドを見てみましょう。
pick- コミット履歴を並べ替えるために使用します。reword- コミットメッセージを変更したいときに使用します。 コミットによって導入された変更には影響しません。edit- コミットを編集または修正するときに使用します。 コミットを小さなコミットに分割したり、コミットによって発生したエラーを削除したりできます。squash- これを使用して 2つのコミットを 1つに結合し、新しいコミットに新しいメッセージを与える機会を与えます。fixup- マージされたコミットのメッセージを破棄し、その上のメッセージを使用することを除いて、squashと同じです。
上記のオプションを例で使用してみます。 この例では、Delftscopetech リポジトリの特定の時点に対してリベースします。
HEAD~7 をリベースします。 私たちは走る:
$ git rebase --interactive HEAD~7
テキスト エディターに次の出力が表示されます。
私たちのコミットは、古いものから新しいものへと並べられています。
テキスト エディターでは、次のことを行います。
squashを使用して、コミット (fa39187) をコミット (1fc6c95) に押しつぶします。- 最後のコミット (
7b36971) をコミット (6b2481b) の前に移動し、pickのままにします。 - コミット (
c619268) をコミット (6b2481b) にマージし、fixupを使用してコミット メッセージを破棄します。 editを使用して (dd1475d) を分割します。rewordを使用してコミット メッセージ (4ca2acc) を修正します。
以下のように、テキスト エディターでコマンドを変更します。
テキスト エディターを保存して閉じると、Git がリベースを開始します。
squash には入力が必要なため、Git は pick 1fc6c95 をスキップしてエディターを開きます。 このように見えるはずです。
変更に問題がなければ、エディターを閉じてリベースを続行できます。 次の 3つのコマンドは入力を必要としませんが、edit は入力を必要とし、以下のメッセージを端末に出力します。
この時点で、git commit --amend コマンドを使用して変更を加え、新しいコミットを作成できます。 完了したら、git rebase --continue コマンドを実行して続行できます。
変更を行った後は、常に git rebase --continue を実行してください。 コマンドの実行を忘れてコーディングを続行すると、後でリベースできなくなります。
ただし、次の方法でこれを修正できます。
- 親への
HEADref に対してgit reset --soft HEAD^コマンドを実行します。 git rebase --continueを実行して、リベースを終了します。
git rebase --abort コマンドを実行してリベースを中止し、プロセスをやり直すこともできます。 これにより、マージの競合を再度解決する必要があります。
reword の部分には入力が必要です。Git は、以下の情報を含むテキスト エディターを開きます。
テキストを変更し、ファイルを保存して、リベースを終了できます。
簡単に言えば、git rebase コマンドを使用すると、コミットに関してリポジトリの状態を変更できます。 コミットをスカッシュ、名前変更、または並べ替えることができます。
リベース中にコンフリクトをマージするときは注意してください。