ウェブサイト検索

Gitフェッチ:マスタークラス


リモートリポジトリに加えられた変更を、実際にファイルをローカルリポジトリに取得することなく確認してください。

重要なポイント

git fetch コマンドは、リモートリポジトリからの情報やコミットでローカルリポジトリを更新する git pull コマンドのようなもので、作業中のファイルを上書きすることはありません。

Gitのfetchコマンドは、飛び込む前に見極めることができます。リモートリポジトリにどのような変更が加えられたかを確認できますが、リモートファイルでローカルファイルを上書きすることはありません。

git fetchとは何ですか、そしてそれは何をしますか?

Gitのfetchコマンドは、リモートリポジトリからローカルリポジトリにコミット、ファイル、およびその他の情報を安全にダウンロードします。他の開発者が行った変更を確認したいときは、変更を受け入れる必要なしにfetchを使用します。ローカルファイルはそのまま untouched です。それがなぜ重要ですか?

開発チームの一員として働くときは、常に注意を払う必要があります。リモートまたは中央リポジトリには、他の開発者が作成し、リモートリポジトリにプッシュした変更や新しいブランチが含まれます。

あなたがコンピュータ上でローカルに修正したファイルのリモートコピーが誰かによって更新された可能性は完全にあります。もしあなたがカジュアルに git pull を実行してローカルリポジトリを更新すると、自分が望んでいないかもしれない変更のマージを処理しなければならないことが多いです。

情報をダウンロードしたら、それを確認して変更点を見てみることができます。これにより、今すぐマージしたいものがあればそれを選択し、後で延期したいものを選ぶための情報に基づいた判断ができます。

Git フェッチとプル

「git fetch」コマンドは「git pull」コマンドのように動作しますが、ローカルファイルを上書きするステップがありません。ローカルリポジトリは更新され、同期されますが、変更はローカルリポジトリの作業状態には適用されないため、ファイルはそのままです。

言い換えれば、git pull コマンドは、すぐ後に git merge を行う git fetch のようなものです。

git fetchを使用して、ローカルリポジトリとリモートリポジトリを同期する

リモートリポジトリからローカルリポジトリに最新のメタデータとコミットを取得するには、git fetchコマンドをリモートリポジトリの名前またはURLと共に使用します。デフォルトでは、最初のリモートリポジトリは「origin」と呼ばれます。

git fetch origin

単一のリモートリポジトリで作業している場合、"origin"という単語は省略できます。

git fetch

それは「origin」リポジトリからの更新を取得しますが、作業ファイルに変更をマージすることはありません。私たちのために取得された「new-branch」と呼ばれる新しいブランチがあることがわかります。

一度fetchコマンドを使用すると、-r(リモート)オプションをブランチコマンドと一緒に使うことで、リモートのすべてのブランチの完全なリストを見ることができます。

git branch -r

これはリモートが知っているすべてのブランチをリストします。fetch の後、これらはあなたのローカルリポジトリにも存在します。

全ての取得されたタグを見る

同様に、タグオプションを使用して(注意、"タグ"は<s>がない”)、タグのリストを見ることができます。

git tag

まずドライランを行う

たとえ git fetch が変更を作業ファイルにマージしなくても、ローカルリポジトリは更新されます。fetch コマンドが実際に何を行うかを見るには、実行せずに、--dry-run オプションを使用してください。

git fetch --dry-run

単一のブランチを取得する方法

単一のブランチに関する情報を取得するのは簡単です。コマンドラインにブランチの名前を追加して、fetchにその1つのブランチのみについて知りたいことを伝えます。

ここでは、fetchにリモートリポジトリ「origin」からブランチ「mary-feature」を取得するように指示しています。

git fetch origin mary-feature

リモートブランチの詳細と内容がローカルリポジトリにあるので、git checkout コマンドを使用して新しいブランチを作成し、リモートブランチにチェックアウトできます。これは、初めてこのブランチを使用する場合、既存のファイルを上書きすることはありません。

git checkout -b mary-feature origin/mary-feature

すべてのブランチを取得する

複数のリモートを使用している場合は、--all オプションを使用して、すべてのブランチからすべての変更をローカルリポジトリに取り込むことで、時間を節約できます。

git fetch --all

ローカルブランチとリモートブランチの比較

リモートブランチのファイルがローカルコピーとどのように異なるかを見るには、git fetchを使用し、その後にgit logコマンドを使用します。

ローカルブランチとリモートブランチの間には2つのピリオド「..」があることに注意してください。--onelineオプションはコミット識別子とコミットメッセージを表示します。

git fetch
git log --oneline mary-feature..origin/mary-feature

一行表示は、ブランチに非常に多くの変更が含まれている場合に便利です。もう少し情報を見たい場合は、--oneline オプションを省略してください。

git log mary-feature..origin/mary-feature

これにより、各コミットの日時と時間、コミットメッセージ、変更著者の連絡先が表示されます。

ローカルブランチをリモートブランチと同期させる

リモートブランチからローカル作業ファイルに変更を統合することにした場合、これらのコマンドを使用できます。

私たちはブランチをチェックして、私たちが作業しているのが現在の作業ブランチであることを確認します。

git checkout mary-feature

ブランチは私たちのためにチェックアウトされており、リモートバージョンの後ろにあると言われています。更新するには git pull を使用し、その後 git status を使って状態を確認できます。

git pull
git status

ローカルファイルに何らかの変更を加えた場合、Gitはブランチをチェックアウトする際に、マージを開始するためにgit pullを実行する必要があることを知らせてくれます。

git checkout mary-feature

単純な git pull は、ファイルを取得してマージするプロセスを開始します。または、すぐに作業を始めて git merge 自体を使用することもできます。まず、正しいブランチで作業していることを確認しましょう。

git checkout mary-feature

現在のブランチをリモートリポジトリのブランチとマージするようにgitに指示しますが、解決する必要のある異なる6つのコミットがあります。

私たちはGitにどのリモートブランチをマージしたいかを伝える必要があります。

git merge origin/mary-feature

エディタが開いて、コミットメッセージを提供するように促されます。提案されたメッセージを受け入れることも、自分のメッセージを追加することもできます。そのエディタは、Gitが異なるエディタを使用するように設定されていない限り、デフォルトのエディタです。

準備ができたら変更を保存してください。エディターを閉じると、マージは自動的に続行されます。

私たちのマージは成功しました。なぜなら、競合がなかったからです。

同じコードの行が2人以上の開発者によって変更されると、コンフリクトが発生します。その場合、Gitは影響を受けたファイル内でコンフリクトをマークします。あなたはそれらを順番に確認し、どの変更を保持するかを選択する必要があります。

半分訓練された子犬

訓練中の子犬のように、fetch はあなたが求めるものを取り出しますが、それを落とすことはありません。もし実際に子犬が見せてくれたものが欲しいのであれば、pull が必要です。

関連: Git リベース: 知っておくべきことすべて

関連記事: