未来エンジニア養成所Blog

プログラミングを皆に楽しんでもらうための情報をお届けします。

【Git&GitHub】プルの設定をリベースに変更する

title


プルの設定をリベースに変更する

今回はプルの設定をリベースに変更するやり方について解説します。


プルにはマージ型とリベース型という2つの型があります。

プルの使い方にもよりますが、私はプルをする時にはリベース型を使うのをオススメしています。

今回はマージ型とリベース型がそれぞれどのように違っていて、そしてリベース型を使うにはどのように設定すれば良いのかと言うことについて解説していきます。


それではプルのマージ型からみていきます。

プルのマージ型とは何かというと、通常の「git pull」になります。

コマンドで言うと、

$ git pull <リモート名> <ブランチ名>

です。


$ git pull origin main

というようなコマンドになります。


このプルのマージ型の特徴はマージコミットが残るので、マージしたという記録を残したい場合に使うのがオススメです。


イメージで押さえておきましょう。

プルのマージ型


「git pull」すると何が起きるかというと、リモートリポジトリからローカルリポジトリに「git fetch」でまず情報を取ってきます。

情報を取ってきたらローカルリポジトリからワークツリーに対して「git merge」します。

fetchとmergeというのが「git pull」の挙動です。

これをプルのマージ型と呼んでいます。


このプルのマージ型、特徴はマージしてマージコミットが残ります。

マージしたという記録を残したい場合はプルのマージ型を使うのがオススメです。


では、次にプルのリベース型について見ていきましょう。


このプルのリベース型のコマンドは

$ git pull --rebase <リモート名> <ブランチ名>

と言ったように「--rebase」というオプションを付ければOKです。


具体的には

$ git pull --rebase origin main

と言ったコマンドになります。


このリベース型の特徴はマージコミットが残らないことです。

マージコミットが残らないので、GitHubの内容を取得したいだけの時は「--rebase」オプションを付けることをオススメします。


ではイメージで押さえておきましょう

プルのリベース型


「--rebase」オプションを付けると、まずリモートリポジトリからローカルリポジトリに「git fetch」で情報を取ってきます。

ここはマージ型と全く一緒です。


違うのはその後で、ローカルリポジトリの内容をワークツリーに取り込む時、その時に「git merge」ではなく「git rebase」を使います。

変更内容の取り込み方が、「git rebase」になるのです。


「git rebase」になることで、マージコミットが残りません。


これがどのような時に嬉しいかというと、たとえば、今自分がmainブランチにいて、GitHub上のmainブランチの最新の情報を取得してきたいとします。

その時に「git pull」で取得すると単純にmainブランチの最新の状態を取ってきたいだけにもかかわらず、マージコミットが残ってしまいます。

ただ、特に何かを変更したわけでもないので、マージコミットは必要ではありません。

そのような時に「git pull --rebase origin main」とすることで、リベースするのでマージコミットを残さずにGitHubの内容をワークツリーに取得してくることができます。


GitHub上のmainブランチの最新の内容を取得するであったりとか、そういったGitHubの内容を単純に取得したいだけの時はリベース型を使うのがオススメです。


プルをリベース型にしたい時、「--rebase」オプションを使って実行しても良いのですが、デフォルトでプルの挙動をリベース型に設定しておくと便利なので、その設定の仕方について紹介します。


設定するためには、ターミナル上で

$ git config --global pull.rebase ture

というコマンドを入力すると設定できます。


これをすると、「--rebase」オプションを付けなくても「git pull」の挙動がリベース型になります。


常にプルはリベース型で実行して欲し時はこのコマンドを入力しますが、もしmainブランチだけで「git pull」する時はリベース型にして他の時はマージ型の挙動をして欲しい場合、

$ git config branch.main.rebase ture

というコマンドを入力します。

するとmainブランチ上で「git pull」したときだけリベース型の挙動になって、それ以外の時はマージ型の挙動をするようになります。


捕捉ですが、このような設定をするとどこに保存されるのかというと、「--global」を付けるとPC全体の設定になって、「~/.gitconfg」や「~/.config/git/cofig」の下にあるconfigファイルにGitの設定内容というのが保存されます。

逆に「--global」を付けないと、今の自分のプロジェクトの下にある「project/.git/config」に保存されて、そのプロジェクトだけで使える設定になります。


実際にやってみよう

ではターミナルを開いて、実際に設定してみましょう。

今回はプルの全部の挙動をリベース型にする設定を行います。

$ git config --global pull.rebase true

これで設定ができました。


参考図書



独学で挫折しそうになったら、オンラインプログラミングスクール
未来エンジニア養成所Logo



あわせて学習したい

phoeducation.work