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

git Git

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

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

git fetchコマンドとは?

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

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

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

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

コメント

タイトルとURLをコピーしました