もう一つの質問それは+git pull
のようなものだと言います。git fetch
git merge
git pull
しかし、とgit fetch
+の違いは何でしょうかgit rebase
?
ベストアンサー1
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
。他の誰かがすでにマスター ブランチからプルしている場合は、リベース アプローチを使用しないでください。
git pull
最後に、 config パラメータを true に設定することで、特定のブランチでマージではなくリベースを使用するように設定できることに注意してくださいbranch.<name>.rebase
。 を使用して単一のプルに対してこれを行うこともできますgit pull --rebase
。