⚙️

【Git&Github】トラッキングブランチ(追跡ブランチ)とは

2024/07/18に公開

トラッキングブランチ(追跡ブランチ)とは

トラッキングブランチの特徴

  • ブランチ名は、ローカルリポジトリのorigin/mainというブランチで管理される。
  • git fetchコマンドを実行すると自動的に更新される。
  • 読み取り専用であり、直接変更することはできない。
  • ローカルブランチはトラッキングブランチを「追跡」するように設定できる。

トラッキングブランチの設定

1.新しいローカルブランチを作成する

featureブランチを作成
git checkout -b feature

2.ファイルを編集後git push -uコマンドを実行する

git push -u origin feature

トラッキングブランチの確認方法

ローカルブランチとその追跡しているリモートブランチの関係が表示される
git branch -vv
出力結果
$ git branch -vv
  develop  9a5862e [origin/develop] Commit message here
  # developはorigin/developをトラッキング
* feature  5a7dffc [origin/feature] Commit message here
  # featureはorigin/featureをトラッキング
  main     a1b2c3d [origin/main] Commit message here
  # mainはorigin/mainをトラッキング
ブランチの確認コマンド
ローカルとリモートのリポジトリ全てのブランチを表示する方法
git branch -a
出力結果(ローカルリポジトリに3つ、リモートリポジトリに2つブランチが作成されている)
$ git branch -a
  develop
* feature
  main
  remotes/origin/feature
  remotes/origin/main
リモートブランチのみ表示する方法
git branch -r
出力結果(リモートリポジトリのブランチ2つのみを表示)
 $ git branch -r
  origin/feature
  origin/main

aheadbehindについて

(例)aheadとbehindについて
(出力結果)git branch -vvコマンドを実行し、トラッキングブランチの状況を確認する
$ git branch -vv
  develop 9a5862e [Start] first commit
* feature  ca2a97f [origin/feature] [Update] index.htmlの修正
  main     77981e5 [origin/main: ahead 1, behind 3] [Update] index.html
上記出力結果の3行目を抜粋
main 77981e5 [origin/main: ahead 1, behind 3] [Update] index.htmlの修正
  • ローカルのmainブランチはorigin/mainというリモートブランチをトラッキングしている。
  • mainブランチは77981e5というコミット(メッセージは[Update] index.htmlの修正)がされている。
  • ahead 1は、ローカルのmainブランチがリモートのorigin/mainブランチより1つ新しいコミットがあることを示している。
  • behind 3は、リモートのorigin/mainブランチがローカルのmainブランチより3つ新しいコミットがあることを示しています。

➡つまり、リモートのorigin/mainブランチが一番最新のコミットが反映されている状況。

エラーが表示されないためのポイント

フェッチ(fetch)を定期的に行う

ブランチを残している場合git fetchを実行し、トラッキングブランチを最新の状態に保つ。

現在使用しているブランチやブランチの情報を確認
git branch -vv 
定期的にfetchを実行する
git fetch

プルリクエストが完了したら不要なブランチ削除する

不要なブランチを残しているとコンフリクトの可能性があるため、不要なブランチは削除する。

リモートで削除されたブランチがローカルのトラッキングブランチからも削除される
git fetch -p
その他のブランチ削除コマンド
git branch -d <branch-name>  # ローカルブランチの削除
git push origin --delete <branch-name>  # リモートブランチの削除

Discussion