もう一つの問題は、言ったgit pull
ようなものですgit fetch
+ git merge
。
しかし、git pull
VS git fetch
+ の違いは何git rebase
ですか?
もう一つの問題は、言ったgit pull
ようなものですgit fetch
+ git merge
。
しかし、git pull
VS git fetch
+ の違いは何git rebase
ですか?
回答:
それはあなたが実際にちょうど間の差について求めていることを、あなたの質問からかなり明白であるべきgit merge
とgit rebase
。
それで、あなたが一般的なケースにいるとしましょう-あなたはあなたのマスターブランチでいくつかの仕事をしました、そしてあなたはオリジンのそれからプルします、そしてそれはまたいくつかの仕事をしました。フェッチ後、次のようになります。
- 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パラメータbranch.<name>.rebase
をtrueに設定することで、マージの代わりにリベースを使用するように特定のブランチを実際に設定できることに注意してください。を使用して、これを1回のプルで行うこともできgit pull --rebase
ます。
git pull
実行されているようなもので git fetch
、その後git merge
git pull --rebase
のようなものですgit fetch
その後、git rebase
git pull
git fetch
+のようなものgit merge
です。
「デフォルトモードでは、git pullはFETCH_HEAD が
git fetch
後に続く 略記ですgit merge
」より正確に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
(バージョン履歴の記録方法の変更の違い)
git fetch + git rebase
コマンドの動作を本当に理解しています。今から私たちのgitツリーに多少の矛盾はありません:)