リモートリポジトリ_から_データを取ってくる方法を学びます -- このコマンドはgit fetchと名付けられています。
fetchとはどのようなものか
git fetchは、主に二つのステップだけで動作します。それは以下のようなものです:
リモートにあってローカルリポジトリにないコミットをダウンロードする
リモートブランチの位置を更新する(例えば、o/main)
git fetchは本質的には、_実際_のリモートリポジトリと同じように見えるような形でリモートリポジトリの_ローカル_の情報に同期します(ちょうど今のように)。
前のレッスンでのことを覚えていると思いますが、リモートブランチはリモートと最後に同期した時点での状態を保持しているという話をしました。git fetchはそのリモートと同期する方法なのです!これでリモートブランチとgit fetchの関係性は明らかになったでしょう?
git fetchは、通常インターネットを通してリモートリポジトリと対話します(http://またはgit://プロトコル経由で)。
fetchがしてくれないもの
git fetchは、しかしながら、_あなたの_ローカルの状態は変更しません。あなたのmainブランチや他のもの、今現在のあなたのファイルシステムが見せているものを更新しないのです。
これは理解する上で重要なことです。なぜなら、多くの技術者はgit fetchがリモートの状態をローカルの作業場に反映してくれると思っているからです。必要なデータはダウンロードされるかもしれませんが、ローカルのファイルを実際に変更するというようなことは_してくれない_のです。
git fetch
実際には多くの方法があり、ローカルに利用可能なリモートの新しいコミットがある場合、あなたはそのコミットを他のブランチの通常のコミットと同じように、自分の作業に組み込むことができます。これは、あなたが次のようなコマンドを実行することで行えます:
git cherry-pick o/main
git rebase o/main
git merge o/main
その他
実は、リモートの変更を取ってきてマージするという作業の流れはとてもよく行われるので、gitは実際にはその二つを同時に行うコマンドを提供しているのです!それは、git pullというコマンドです。
git fetch;
git merge o/main
と
git pull
は同じことが起こる。
明確にgit pullはgit fetchして取ってきたブランチの内容をマージするという流れの短縮系であることが確認できます。
git pull 詳細説明
リモートリポジトリから最新の変更を取得してローカルリポジトリに統合するために使用されます。
具体的には、以下のようなステップで動作します:
git fetch: リモートリポジトリから最新の情報を取得しますが、まだローカルブランチには変更が統合されません。
git mergeまたはgit rebase: 取得したリモートリポジトリの変更を、ローカルブランチに統合します。git mergeは変更をマージコミットとして取り込みますが、git rebaseは変更を現在のローカルコミットの後に再適用して整理します。
これにより、リモートリポジトリで行われた変更がローカルリポジトリに取り込まれ、ローカルリポジトリの最新状態が保たれます。ただし、変更の競合(コンフリクト)が発生する可能性があるため、注意が必要です。競合が発生した場合、手動で解決する必要があります。
要するに、git pullはリモートリポジトリから新しい変更を取得して、それをローカルリポジトリに統合するためのコマンドです。
git push git pullの反対
共有する作業をアップロードする方法は作業をダウンロードするものと対照的です。git pullの反対はなんでしょう? git pushです!
git pushは_あなたの_変更をリモートに対話的にアップロードし、リモートにあなたの新しい変更を取り込みます。git pushが完了すれば、全ての友人たちがあなたの作業をリモートからダウンロードすることができます。
git commit
git commit
git push