git fetchコマンドの使い方!リポジトリの最新情報を取得する

gitGit

git fetchコマンドの使い方について書いています。
最初にgit fetchコマンドについて簡単に解説して、実際にgit fetchコマンドを使って最新情報を取得してみます。

載せているコマンドについては、Gitのバージョン2.32.0で試してみました。

PR

git fetchコマンドとは?

git fetchコマンドを使うと、リポジトリから最新の情報を取得することができます。
リポジトリの最新情報を取得するだけで、現在のローカルのソースコードが変わることはありません。

git pullコマンドの方は使用すると、git fetchとgit mergeが動くので、最新のソースコードが変わります。
git fetchコマンドは最新のソースコードの状況を確認したり、最新のブランチを取得したいときなどに使います。

git pullコマンドについては、こちらを確認してみてください。
【Git入門】git pullの使い方!pullで最新ソースを取得しよう
PR

git fetchコマンドの使い方

git fetchコマンドは、クローンしたリポジトリディレクトリ配下で、下記のコマンドを実行すると動きます。

$ git fetch

複数のリポジトリの設定などを行なっていない場合は、基本的に上記コマンドをよく使用するかと思います。
次項では、実際にgit fetchコマンドを使用して、ローカルの状態がどうなるのか確認してみました。

git fetchコマンドを使ってみる

2人のユーザーが同じリポジトリを使っていることを想定します。
ユーザーAが最新情報をリモートのリポジトリにプッシュして、ユーザーBが最新をfetchコマンドで取得するといった流れを確認してみます。
Gitのコミット履歴については、VSCodeのGit Graphプラグインを使って確認しています。

ユーザーAが新規のコミットをプッシュする

ユーザーAがコミットをして、プッシュをした時に履歴が下記の状態になります。
git fetchコマンドテストのためのコミット確認

「add test」というコメントで、コミットをして、リモートリポジトリにプッシュした状態です。
ローカルのmainとorigin/main(リモートリポジトリのmain)が同じ位置にいることが確認できました。

ユーザーBが最新状態を取得する

この時にユーザーBは最新を取得していない状態です。
ローカルで、履歴の状態を確認すると、このように「add hello message」の箇所でコミット履歴が止まっています。
git graphでローカルの状態確認

ここでユーザーBがgit fetchコマンドを使って、最新を取得します。

$ git fetch
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0
Unpacking objects: 100% (3/3), 270 bytes | 135.00 KiB/s, done.
From github.com:yasuaki0206/test-repository
   94f4e54..6234004  main       -> origin/main

そうすると、このようにリモートリポジトリの情報が取得できました。
git fetchコマンドで最新情報の取得後の状態
ユーザーBのローカルでは、リモートリポジトリの最新情報を取得してきただけです。
そのため、ローカルのmainブランチがorigin/main(リモートリポジトリのmain)のひとつ手前になっていますね。

git pullコマンドを使った場合には、情報取得とソースの取得を一緒に行います。
そのため実行後には「add test」の箇所にローカルブランチもそろって、ソースも最新になります。

ブランチの最新情報を取得したいとき

ブランチの最新情報を取得したい場合にもgit fetchを使います。
下記はユーザーAがgit branchコマンドでブランチを作成して、ユーザーBがgit fetchコマンドで取得する例です。

git branchコマンドについては、こちらを確認してみてください。
【Git入門】git branchの使い方!ブランチの作成などトピックス4つ!

ユーザーAがブランチを作成してプッシュする

ユーザーAでtestBranchブランチを作成しました。

$ git branch testBranch

作成したブランチをリモートリポジトリにプッシュします。

$ git push origin testBranch

ローカルで、ブランチを確認します。
そうすると、下記のようにtestBranchがローカルにあるのと、リモートリポジトリ(origin/testBranch)にあるのが確認できました。

$ git branch -a
* main
  newBranch
  testBranch
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/testBranch

ユーザーBでブランチを取得する

ユーザーBのローカルで、ブランチを確認すると、下記の状態です。
git branchコマンドに-aオプションをつけて、リモートリポジトリのブランチも確認しています。

$ git branch -a
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main

git fetchコマンドを使用すると、下記のようにブランチを取得できました。

$ git fetch
From github.com:yasuaki0206/test-repository
 * [new branch]      testBranch -> origin/testBranch

git branchコマンドで確認すると、下記のようになります。
リモートリポジトリに新規でプッシュしたorigin/testBranchが見えるようになりました。

$ git branch -a
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/testBranch

コメント

Ads Blocker Image Powered by Code Help Pro

広告ブロッカーが検出されました。

ブラウザの拡張機能を使用して広告ブロックをしていることが確認できました。 ブラウザの広告ブロッカー機能を無効にしていただくか、codelikes.comをホワイトリストに追加し、更新をクリックしてください。 お手数ですが、よろしくお願いします🙇‍♂️
タイトルとURLをコピーしました