Git Fetch: マスタークラス

公開: 2023-02-26
背景に地球のパターンとバイナリの透かしが表示されたターミナル ウィンドウを表示している Linux ラップトップ
Fatmawati achmad zaenuri/Shutterstock.com
git fetch コマンドは、作業ファイルを上書きすることなく、リモート リポジトリからの情報とコミットでローカル リポジトリを更新する git pull コマンドのようなものです。

Git fetchコマンドを使用すると、飛躍する前に調べることができます。 リモート リポジトリに加えられた変更を検出できますが、ローカル ファイルをリモート ファイルで上書きする必要はありません。

目次

git fetch とは何ですか?
Git フェッチとプル
ローカルとリモートのリポジトリを git fetch で同期する
取得したタグをすべて表示
最初に予行演習を行う
単一のブランチをフェッチする方法
すべてのブランチをフェッチ
ローカル ブランチとリモート ブランチの比較
ローカル ブランチとリモート ブランチの同期
半分訓練された子犬

git fetch とは何ですか?

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

開発チームの一員として働いているときは、自分のことをよく考えておく必要があります。 リモートまたは中央リポジトリには、他の開発者が作成してリモート リポジトリにプッシュした変更と新しいブランチが含まれます。

コンピューター上でローカルに変更したファイルのリモート コピーが誰かによって更新された可能性は十分にあります。 気軽にgit pullを実行してローカル リポジトリを更新すると、不要な変更のマージを自分で処理していることに気付くでしょう。

情報をダウンロードしたら、それを調べて変更内容を確認できます。 これにより、今すぐマージしたいものと、後でマージしたいものについて、情報に基づいた選択を行うことができます。

Git フェッチとプル

git fetchコマンドはgit pullコマンドのように動作しますが、ローカル ファイルを上書きする手順はありません。 ローカル リポジトリは更新および同期されますが、変更はローカル リポジトリの作業状態に書き込まれないため、ファイルはそのまま残ります。

別の言い方をすれば、 git pullコマンドは、 git fetch直後にgit mergeが続くようなものです。

ローカルとリモートのリポジトリを git fetch で同期する

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

 git フェッチの起源

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

 git フェッチ

デフォルトのリモート リポジトリで git fetch コマンドを使用する

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

fetchコマンドを使用したら、ブランチ コマンドで-r (リモート) オプションを使用して、リモート上のブランチの完全なリストを表示できます。

 git ブランチ -r 

デフォルトのリモートに存在するブランチを見る

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

取得したタグをすべて表示

同様に、 tagオプション (「s」なしの「tag」であることに注意してください) を使用して、タグのリストを表示できます。

 git タグ

git tag コマンドを使用して、ローカル リポジトリ内のタグを一覧表示する

関連: Git リモートを切り替え、追加、および削除する方法

最初に予行演習を行う

git fetch変更を作業ファイルにマージしませんが、それでもローカル リポジトリを更新します。 fetchコマンドが実行する変更を、実際には作成せずに確認したい場合は、 --dry-runオプションを使用します。

 git fetch --dry-run 

--dry-run オプションを使用して、fetch コマンドが取得する変更を確認します

単一のブランチをフェッチする方法

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

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

 git fetch オリジン mary-feature 

git fetch を使用して単一のリモート ブランチを取得する

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

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

取得したリモート ブランチを新しいローカル ブランチに安全にチェックアウトする

すべてのブランチをフェッチ

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

 git フェッチ --all

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

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

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

 git フェッチ
git log --oneline mary-feature..origin/mary-feature 

git を使用してリモートの変更をフェッチし、git log を使用して変更を表示する

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

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

--oneline オプションを省略して、git が各コミットの詳細を表示するようにする

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

ローカル ブランチとリモート ブランチの同期

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

ブランチをチェックアウトして、それが現在の作業中のブランチであることを確認します..

 git checkout mary-feature 

ブランチのチェックアウト

ブランチがチェックアウトされ、リモート バージョンの背後にあることがわかりました。 git pullを使用して更新し、 git statusを使用してステータスを確認できます。

 gitプル
git ステータス

rmeote リポジトリからローカル リポジトリへの変更のプル

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

 git checkout mary-feature 

Git が、ローカルとリモートのブランチが分岐しており、マージする必要があることを通知します

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

git checkout mary-feature 

Git が、ローカルとリモートのブランチが分岐しており、マージする必要があることを通知します

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

マージ成功メッセージ

マージするリモート ブランチを Git に伝える必要があります。

 git merge origin/mary-feature 

git merge を使用して、リモートの変更をローカル ブランチにマージする

エディターが開き、コミット メッセージを提供できるようになります。 提案されたメッセージを受け入れるか、独自のメッセージを追加できます。 Git が別のエディターを使用するように構成されていない限り、エディターはデフォルトのエディターです。

コミットメッセージの編集

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

競合がなかったため、マージは成功しました。

マージ成功メッセージ

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

半分訓練された子犬

訓練中の子犬のように、 fetch要求したものを取得しますが、ドロップしません。 子犬が見せてくれたものが本当に欲しいなら、 pull必要があります。

関連: Git rebase: 知っておくべきことすべて