別の質問によると、それは+git pull
のようなものです。git fetch
git merge
git pull
しかし、とgit fetch
+の違いは何git rebase
ですか?
別の質問によると、それは+git pull
のようなものです。git fetch
git merge
git pull
しかし、とgit fetch
+の違いは何git rebase
ですか?
あなたの質問から、実際には と の違いについて尋ねているだけであることは明らかgit merge
ですgit rebase
。
それでは、一般的なケースにいるとしましょう。マスター ブランチでいくつかの作業を行っており、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)
作業ツリーの内容は、どちらの場合も同じになるはずです。それに至るまでの別の歴史を作成しただけです。リベースは履歴を書き換え、R
最初にコミットした場所 ( ) ではなく、オリジンの新しいマスター ブランチ ( ) の上にコミットしたかのように見せますH
。他の誰かがすでにマスター ブランチからプルしている場合は、リベース アプローチを使用しないでください。
最後に、config パラメーターを true にgit pull
設定することで、マージの代わりにリベースを使用するように特定のブランチを実際に設定できることに注意してください。branch.<name>.rebase
を使用して、1 回のプルでこれを行うこともできますgit pull --rebase
。