Daiブログ

普段学習したことや生活のことについて書いていきます〜

git pull と git pull --rebase の違いについて

git を使っているとgit pullだったりgit pull --rebaseを使うことが多いと思います。 この違いについて理解するためのアウトプットとして書いています。

git pull

git fetch + git mergeと同じ

git fetchはリモートブランチの内容をローカルにあるリモート追跡ブランチに持ってきます。 このリモート追跡ブランチというのはリモートブランチのコピーのようなもの。 そしてgit mergeでリモート追跡ブランチの内容を現在のブランチに反映させます。

git pull --rebase

git fetch + git rebaseと同じ

git fetchはgit pullと同様です。

git rebaseは持ってきたリモートブランチの内容を現在のブランチの分岐元に持ってきます。

  • rebaseする前
A ー B ー C --- リモートブランチ
      \
         D --- ローカルブランチ
  • rebaseした後
A ー B ー C --- リモートブランチ
           \
             D --- ローカルブランチ

rebaseした後はリモートにプッシュする際に--force-with-leaseが必要になります。

これはリモートとローカルでブランチの分岐もとが変わってしまうためです。