コマンド ラインで 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
を実行してください。 コマンドの実行を忘れてコーディングを続行すると、後でリベースできなくなります。
ただし、次の方法でこれを修正できます。
- 親への
HEAD
ref に対してgit reset --soft HEAD^
コマンドを実行します。 git rebase --continue
を実行して、リベースを終了します。
git rebase --abort
コマンドを実行してリベースを中止し、プロセスをやり直すこともできます。 これにより、マージの競合を再度解決する必要があります。
reword
の部分には入力が必要です。Git は、以下の情報を含むテキスト エディターを開きます。
テキストを変更し、ファイルを保存して、リベースを終了できます。
簡単に言えば、git rebase
コマンドを使用すると、コミットに関してリポジトリの状態を変更できます。 コミットをスカッシュ、名前変更、または並べ替えることができます。
リベース中にコンフリクトをマージするときは注意してください。
John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.
LinkedIn