1. ホーム
  2. ギット

[解決済み】git pullとgit fetch + git rebaseの違いは何ですか?

2022-03-27 07:37:17

質問

別の質問 には、次のように書かれています。 git pull は、まるで git fetch + git merge .

しかし git pullgit fetch + git rebase ?

解決方法は?

この質問から明らかなように、あなたは単に git mergegit rebase .

自分の master ブランチで何らかの作業をした後、origin のブランチからプルしたとしましょう。フェッチした後の状況は、このようになります。

- o - o - o - H - A - B - C (master)
               \
                P - Q - R (origin/master)

この時点でマージ(git pullのデフォルト動作)すると、コンフリクトがないと仮定して、以下のような結果になります。

- o - o - o - H - A - B - C - X (master)
               \             /
                P - Q - R --- (origin/master)

一方、適切なリベースを行った場合、このようになります。

- o - o - o - H - P - Q - R - A' - B' - C' (master)
                          |
                          (origin/master)

ワークツリーの内容は、どちらも同じになるはずです。 . リベースによって履歴が書き換えられ、あたかも origin の新しい master ブランチの上でコミットしたかのようになります ( R ) の代わりに、元々コミットした場所 ( H ). 誰かがすでにあなたの master ブランチから pull している場合は、決して rebase のアプローチをとってはいけません。

最後に、実際に設定することができることに注意してください。 git pull を設定することで、あるブランチに対してマージではなくリベースを使用するようにできます。 branch.<name>.rebase を true に設定します。また、単一のプルに対してこの操作を行うには git pull --rebase .