git fetchコマンドの使い方について書いています。
最初にgit fetchコマンドについて簡単に解説して、実際にgit fetchコマンドを使って最新情報を取得してみます。
載せているコマンドについては、Gitのバージョン2.32.0で試してみました。
git fetchコマンドとは?
git fetchコマンドを使うと、リポジトリから最新の情報を取得することができます。
リポジトリの最新情報を取得するだけで、現在のローカルのソースコードが変わることはありません。
git pullコマンドの方は使用すると、git fetchとgit mergeが動くので、最新のソースコードが変わります。
git fetchコマンドは最新のソースコードの状況を確認したり、最新のブランチを取得したいときなどに使います。
・【Git入門】git pullの使い方!pullで最新ソースを取得しよう
git fetchコマンドの使い方
git fetchコマンドは、クローンしたリポジトリディレクトリ配下で、下記のコマンドを実行すると動きます。
$ git fetch
複数のリポジトリの設定などを行なっていない場合は、基本的に上記コマンドをよく使用するかと思います。
次項では、実際にgit fetchコマンドを使用して、ローカルの状態がどうなるのか確認してみました。
git fetchコマンドを使ってみる
2人のユーザーが同じリポジトリを使っていることを想定します。
ユーザーAが最新情報をリモートのリポジトリにプッシュして、ユーザーBが最新をfetchコマンドで取得するといった流れを確認してみます。
Gitのコミット履歴については、VSCodeのGit Graphプラグインを使って確認しています。
ユーザーAが新規のコミットをプッシュする
ユーザーAがコミットをして、プッシュをした時に履歴が下記の状態になります。
「add test」というコメントで、コミットをして、リモートリポジトリにプッシュした状態です。
ローカルのmainとorigin/main(リモートリポジトリのmain)が同じ位置にいることが確認できました。
ユーザーBが最新状態を取得する
この時にユーザーBは最新を取得していない状態です。
ローカルで、履歴の状態を確認すると、このように「add hello message」の箇所でコミット履歴が止まっています。
ここでユーザー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
そうすると、このようにリモートリポジトリの情報が取得できました。
ユーザーBのローカルでは、リモートリポジトリの最新情報を取得してきただけです。
そのため、ローカルのmainブランチがorigin/main(リモートリポジトリのmain)のひとつ手前になっていますね。
git pullコマンドを使った場合には、情報取得とソースの取得を一緒に行います。
そのため実行後には「add test」の箇所にローカルブランチもそろって、ソースも最新になります。
ブランチの最新情報を取得したいとき
ブランチの最新情報を取得したい場合にもgit fetchを使います。
下記はユーザーAがgit branchコマンドでブランチを作成して、ユーザーBがgit fetchコマンドで取得する例です。
・【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
コメント