この記事を書くきっかけ
Gitには「masterブランチ」と「origin/masterブランチ」というブランチがデフォルトで用意されています。
SourceTree(Gitでのファイル管理をコマンド入力ではなく視覚的な操作で行うことができるソフトウェア)を使い始めたとき、新しいブランチを作っていないのに、「masterブランチ」と「origin/masterブランチ」の2つのブランチが表示されていることに疑問を感じていました。
今回は、その疑問を解消するべく、それぞれの違いについて説明します。
masterとorigin/master
master
- master はローカルリポジトリのブランチを指します(ローカルブランチ)。
- ローカルでの作業やコミットは、このブランチに対して行われます。
- master はリモートリポジトリにプッシュされる前の状態を保持します。
origin/master
- origin/master は、リモートリポジトリ(GitHubなど)におけるmasterブランチの最新の状態を指します。
- また、ローカルリポジトリが最後にリモートリポジトリと同期したときのリモートのmasterブランチの状態を示します。
git fetch
や git pull
コマンドを実行すると、origin/master がリモートリポジトリの最新のmasterブランチに更新されます。
両者の違い
ローカルリポジトリ側から見た場合の、
masterとは、ローカルリポジトリのブランチ。ローカルでの作業やコミットが行われる。
origin/masterは、最後にリモートからフェッチまたはプルしたときのリモートのmasterブランチの状態を表すもの。
リモートリポジトリ側から見た場合の、
masterとは、リモートリポジトリのmasterブランチ。リモートリポジトリ上の最新のコミットを含むもの。
つまり、
ローカルリポジトリのmasterブランチは「master」、リモートリポーターのmasterブランチは「origin/master」という書き方をしているわけですね。
実際の使用例
-
ローカルでファイルを編集し、ローカルリポジトリのmasterブランチにコミットしたい!
git add .
git commit -m "メッセージ"
-
ローカルの変更をリモートリポジトリのmasterブランチにプッシュしたいな!リモートリポジトリのmasterブランチの名前はorigin/masterだから、コマンドはこうね!
git push origin master
-
リモートリポジトリの最新の状態をローカルに反映させるためにプルしたいな。リモートリポジトリのmasterブランチの名前はorigin/masterだから、コマンドはこうね!
git pull origin master
これで変更がローカルに反映させれ、ローカルのmasterブランチとリモートのmasterブランチ(origin/master)が最新の状態に保たれます。
originとmasterが指しているものは
originとは?
originは、リモートリポジトリのデフォルトの名前です。Gitでリポジトリをクローンすると、クローン元のリポジトリに対してこのデフォルトの名前が自動的に付けられます。
例えば、GitHubからリポジトリをクローンする場合、クローン元のURLがoriginという名前で登録されます。
masterとは?
masterは、Gitのリポジトリでデフォルトのブランチとして作成されるブランチの名前です。最近では、mainがデフォルトブランチとして使われることが増えています。master/slaveというようなIT用語が主人と奴隷を連想させてしまい、言葉として現代の世相にそぐわないみたいです。
master と origin/master の現在の状態を確認する方法
ローカルのmasterブランチのログを表示(ローカルリポジトリのmasterブランチのログを見せてくれ!)
git log master
リモートのmasterブランチのログを表示(リモートリポジトリであるoriginリポジトリのmasterブランチのログを見せて!)
git log origin/master
まとめ
masterとorigin/masterについて知ることができて良かったです。