どうしても理解できません。Web や本をたくさん読んでいるのですが、何かが頭から離れません。誰か次のダミー バージョンを教えていただけませんか。
- git フェッチとプル
- git マージとリベース
ベストアンサー1
フェッチとプル
fetch
リモート* ブランチからの変更をダウンロードし、リポジトリ データを更新しますが、ローカル* ブランチは変更されません。
pull
を実行しfetch
、さらにmerge
変更をローカル ブランチに反映します。
違いは何ですか? pull
プルされたブランチからの変更でローカル ブランチを更新します。A はfetch
ローカル ブランチを前進させません。
マージとリベース
次の履歴を考慮すると:
C---D---E ローカル / A---B---F---G リモコン
merge
2 つの開発履歴を結合します。これは、リモート ブランチ上で分岐した後にローカル ブランチで発生した変更を再生し、その結果を新しいコミットに記録することによって行われます。この操作により、各コミットの祖先が保持されます。
の効果は次merge
のようになります。
C---D---E ローカル / \ A---B---F---G---H リモコン
rebase
ローカル ブランチに存在するコミットを取得し、リモート ブランチの上に再適用します。この操作により、ローカル コミットの祖先が書き換えられます。
の効果は次rebase
のようになります。
C'--D'--E' ローカル / A---B---F---G リモコン
違いは何ですか?A はmerge
コミットの祖先を変更しません。A はrebase
ローカルコミットの祖先を書き換えます。
*
この説明では、現在のブランチがローカルブランチであり、、、、またはの引数として指定されたブランチがリモートブランチであると仮定しています。これfetch
は通常のケースです。たとえば、は、pull
merge
rebase
pull
指定されたブランチを更新し、リポジトリとmerge
変更を現在支店。