別の質問git pull
はgit fetch
+ git merge
のようなものだと言いました。
しかし、git pull
VS git fetch
+ git rebase
の違いは何ですか?
git merge
とgit 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)
どちらの場合も、作業ツリーの内容は同じになるはずです。それまでの異なる履歴を作成したばかりです。リベースは履歴を書き換え、最初にコミットした場所(R
)ではなく、Originの新しいマスターブランチ(H
)でコミットしたかのように表示します。マスターブランチから他の誰かが既にプルしている場合は、リベースアプローチを使用しないでください。
最後に、設定パラメーターgit pull
をtrueに設定することで、マージの代わりにリベースを使用するように、特定のブランチのbranch.<name>.rebase
を実際に設定できることに注意してください。 git pull --rebase
を使用して、1回のプルでこれを行うこともできます。
git pull
はget fetch
を実行してからgit merge
を実行するようなものですgit pull --rebase
はgit fetch
のようなもので、次にgit rebase
のようなものです
git pull
はgit fetch
+ git merge
に似ています。
「デフォルトモードでは、git pullは
git fetch
の省略形であり、その後にgit merge
FETCH_HEADが続きます」正確には、git pull
は指定されたパラメーターでgit fetch
を実行し、git merge
を呼び出して、取得したブランチヘッドを現在のブランチにマージします。
(参照: https://git-scm.com/docs/git-pull )
'しかし、git pull
VS git fetch
+ git rebase
の違いは何ですか'
繰り返しますが、同じソースから:git pull --rebase
「--rebaseを使用すると、git mergeではなくgit rebaseが実行されます。」
'merge
とrebase
の違い'
ここでも回答されています:
https://git-scm.com/book/en/v2/Git-Branching-Rebasing
(バージョン履歴の記録方法を変更する場合としない場合の違い)