320

別の質問によると、それは+git pullのようなものです。git fetchgit merge

git pullしかし、とgit fetch+の違いは何git rebaseですか?

4

2 に答える 2

358

あなたの質問から、実際には と の違いについて尋ねているだけであることは明らか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

于 2010-07-28T20:23:49.813 に答える