はじめに
私がGitについて勉強し始めてすぐの頃、Gitのコマンドを間違えてしまい研修で作ったプログラムがすべて消えてしまったことがあります。それからGitを使うのがとても怖かったです。もしもGitコマンドの動きを正確に知っていればこのようなミスはしなかったと思います。
この記事ではGit初心者向けに、git branch
コマンドに焦点を当てて実行されたときの動きをまとめています。
具体例と実行コマンド
自分で作成した既存のブランチを一覧表示する
git branch
本記事で出てくるコマンドの基本となるgit branch
ですが、こちらはリモート追跡ブランチ以外のローカルブランチを一覧表示します。
これだけではローカルブランチをすべて表示することはできません。
ローカルブランチ
自分のパソコンの中にあるブランチです。
「オフラインで操作可能なブランチ」のようなイメージであり、本来は下記のリモート追跡ブランチもローカルブランチに含まれます。
しかし、一般的にローカルブランチと呼ばれるものは上記コマンドgit branch
で表示されるブランチのことを指します。
リモート追跡ブランチ
リモートブランチを参照しているローカルブランチです。
本来はローカルブランチの一つですが、本記事ではわかりやすくするためにグラフなどでローカルブランチとリモート追跡ブランチを分けて書いている場合があります。
リモートブランチ
ネットワーク上にあるブランチです。
「オンラインで操作可能なブランチ」のようなイメージです。
すべてのローカルブランチを一覧表示する
git branch -a
git branch --all
こちらのコマンドがすべてのローカルブランチを表示することができます。リモート追跡ブランチも一緒に表示したい場合はこちらを使います。
よくある-a
オプションの間違った説明
よく「ローカルブランチとリモートブランチを表示する」と説明されていることがありますが、これは誤りでリモートブランチは表示されません。 表示されるのはリモート追跡ブランチです。
例えば、別の人が新しくリモートブランチを作成したとします。もしリモートブランチを見られるのなら、git branch -a
コマンドで表示できるはずです。
しかし実際には追加されたリモートブランチは表示されません。
表示されるリモート追跡ブランチを更新するには、git fetch
やgit pull
を使用する必要があります。これによりリモートブランチとリモート追跡ブランチが同期され、その後git branch -a
コマンドを実行することでリモートブランチと同期したリモート追跡ブランチが表示できるようになります。
ブランチごとに最新のコミットIDとメッセージ、上流ブランチの名前を表示する
git branch --verbose --verbose
git branch -vv
verbose
とは「詳細な」という意味があり、それが二つ繋がっているのでとても詳細な情報を表示してくれます。
具体的には下記の5つですが、基本的には3番を知るために使うことが多いです。
- コミットIDの最初の7文字
- 最新のコミットのコミットメッセージ
- 上流ブランチ名
- 上流ブランチにプッシュしていないコミットの数
- 上流ブランチからプルしていないコミットの数
上流ブランチという単語は聞きなれない方もいると思いますが、Gitコマンドの動きを知るうえではとても重要だと思います。
上流ブランチ
ローカルブランチの追跡先として設定しているブランチのことです。
基本的にリモートブランチを上流ブランチとして設定します。
git push
やgit fetch
、git pull
などのコマンドを省略して使用したい場合は意識することになります。
追跡ブランチ
特定のブランチを追跡しているブランチのことです。
リモート追跡ブランチから作成されたブランチは同期しているリモートブランチを上流ブランチとして設定しています。
ローカルブランチを削除する
git branch -d [ローカルブランチ名]
ローカルブランチを削除できます。
しかし削除したいブランチが上流ブランチを設定している場合、変更履歴が失われないための措置としてマージ済みかどうかをチェックしています。そのため、マージされていない場合は警告を出すため削除することができません。
例として下記のグラフのような状況があるとします。
ローカルブランチのfeature/01を削除するには下記の2つを満たさなければいけません。
- feature/01がmasterにマージされている
-
git fetch
やgit pull
でリモート追跡ブランチの情報を更新している
強制的にローカルブランチを削除する
git branch -D [ローカルブランチ名]
git branch -d
で警告が出るけど必要ないブランチを削除したいときはこちらのコマンドで削除することができます。
強制的に削除できてしまうので本当に必要ないブランチなのか把握したうえで使うようにすべきだと思います。
おわりに
この記事には書いていない便利なコマンドはほかにもありますが、特にgit branch
について紹介しました。
Gitについて調べるといろいろな情報が出てきてどれが正しいのかわからなくなる時があるので公式ドキュメントを確認するのはとても大切だと考えています。ぜひご自身でドキュメントを読んで理解していただきたいと思います。