はじめに
個人開発の場合はそんなに意識することがないGitですが、チーム開発においては重要な役割を果たします。
はじめのうちは構造が見えず混乱するかと思いますが、流れをイメージ出来ればそんなに難しいものではありません。
これを見れば開発に必要なGitコマンドとリポジトリの構造、Githubでの管理手順を理解し開発の現場で実践できるようになります。
そもそもGitとは?
変更履歴を記録・追跡するための分散型バージョン管理システムである。
ざっくりいうとファイルのバージョン管理が簡単にできるツールといえます。
目次
Gitを理解するための基本用語
開発の流れ
その他開発で覚えておきたい便利コマンドと注意点
vscodeでのGUI操作について
最後に
Gitを理解するための基本用語
リポジトリ(repository)
ファイルやディレクトリを入れて保存しておく貯蔵庫
リモートリポジトリ...特定のサーバー上に設置して複数人で共有するもの。
ローカルリポジトリ...ユーザーごとに配置される手元のマシンで編集できるもの。
クローン(clone)
ファイルのダウンロードのようなもの
複数人で共有しているファイル(リモートリポジトリ)をまるごと自分のローカル環境(ローカルリポジトリ)に保存する機能であり、ほとんどの場合Gitで最初に行う作業になります。
ワークツリーとインデックス
ワークツリー...ユーザーが編集している作業中のディレクトリ
インデックス...ワークツリーと、ローカルリポジトリの中間領域
コミット(commit)
ファイルやディレクトリの編集作業をローカルリポジトリに記録するために必要な操作
コミットを実行すると編集した日時を記録したファイルが生成されます。
コメントを付けることもでき、生成されたファイルは時系列順にならんで格納されるので、ファイルを編集した履歴やその内容を確認することができるわけです。
プッシュ(push)
ファイルのアップロードのようなもの
リモートリポジトリに変更履歴がアップロードされて、リモートリポジトリ内の変更履歴がローカルリポジトリの変更履歴と同じ状態になります。
ブランチ(branch)
ファイルの編集履歴を分岐させて記録していく機能
mainブランチ(画像のマスターブランチ)と、そこから分岐してバグの修正や、機能の追加を行っているfeacureブランチ(作業ブランチ)を例に挙げると下記のようになります。

基本的にはこのfeatureブランチで作業していくことになります。
追跡ブランチ
リモートの変更を監視するブランチ
リモートリポジトリをcloneした際に、ローカルリポジトリ上で作成される、リモートリポジトリの更新を追いかける(文字通り追跡する)ためのブランチです。
gitを確認してみると、ローカル上に存在する「origin/main」と表記されているものがあり、それがリモート追跡ブランチです。作業ブランチとして切り分けたfeatureブランチにもそれぞれ追跡ブランチが存在します。
プル(pull)
fetchとmergeを一括に行う操作
基本的にローカルのmainブランチを最新のものにする場合git pullを行います。
この後それぞれの操作の紹介はありますが簡単にまとめると
1.fetchで最新のリモートブランチを追跡ブランチに反映(ファイルの更新はまだ)
2.mergeで追跡ブランチをローカルのmainブランチへ反映
3.ローカルのmainブランチが最新のもに更新される(ファイルの更新が行われる)
フェッチ(fetch)
リモートリポジトリから最新情報をローカルリポジトリに持ってくる操作
fetchはファイルが更新されるわけではなく、あくまでもローカルリポジトリが更新される(追跡ブランチが最新になる)だけの操作です。なので基本的にローカルのmainブランチを最新にするときはこのコマンドではなく、git pullを行います。
マージ(merge)
ブランチに最新の状態を統合する操作
git pullで言うと追跡ブランチをローカルのmainブランチへ反映させる部分になります。
ブランチの履歴にないコミットのファイル変更を取り込むための操作です。
開発の流れ
-
mainブランチからスタート
- ローカルリポジトリで
mainブランチに入る - リモートリポジトリで
mainブランチの更新があるか確認
- ローカルリポジトリで
-
featureブランチ(作業ブランチ)で開発
-
featureブランチを切る - 開発
- 変更箇所をローカルリポジトリで
commit
-
-
レビュー
- リモートリポジトリへ
push -
Pull Requestを出す -
PRでレビューをもらう
- リモートリポジトリへ
-
mainブランチへマージ
-
PRのレビューが完了したら、mainブランチへmergeする
-
mainブランチへ移動
$ git checkout main
ローカルのmainに最新のリモートの状態を反映
$ git pull
コンフリクトを防ぐために必ずローカルのmainを最新の状態にする
ブランチを切る
$ git checkout -b feature/new branch
ブランチ名はfeature/xxxとする
開発
featureブランチの変更点はmainブランチには反映されないため、バグや大事なファイルを消してしまっても再度mainブランチに戻ってfeatureブランチを切ればやり直すことができます。
追加・変更点をステージング
$ git add [指定]
コミット
$ git commit -m "メッセージ"
コミットメッセージのフォーマットは、"[コミット種別] #対応するPR番号 要約"とする。コミット種別は以下の四種類を使う
- fix (変更)
- add (追加)
- update (更新)
- remove (削除)
リモートリポジトリへpushする
$ git push origin feature/new-branch
Githubのリモートリポジトリへ、ローカルリポジトリの変更を反映させます。
これでPRを出したり、他の人があなたの更新したコードを見えるようになります。
masterブランチへ直接のpushはしないようにしましょう。
git push -f origin mainは絶対に使わないでください。
プルリクエストを出す
Github上のリポジトリページに飛びます。
すると、pushしたブランチのPull Request (PR)を出せるようになっています。
画面上部の[Compare & pull request]を押し以下の手順で編集・作成してください。
①.レビュアーの指定
②.タイトルに[ブランチ名]要約と記載
③.概要や問題点などがあれば記載
④.[Create pull request]を押す
レビューをもらう
修正箇所やバグがあればをコメントでレビューをもらい、作業ブランチで対応したものを再度commit、pushします。これらを繰り返しmergeできる状態にしていきます。
mainブランチへmerge
PRの[Conversation]タブを開き、一番下の[Squash and merge]をクリックしてください。[Squash and merge]がない場合は、▼を押してプルダウンから選択してください。
これでリモートのmainブランチにfeatureブランチで書いたコードが反映されます。
その他開発で覚えておきたい便利コマンド
一時的にコミットせず退避させたい
作業中のブランチから別ブランチへ移動したいとなった時に、作業が中途半端でコミットせずにブランチを移動したいという状況で使えます。
$ git stash
退避したものを戻す
$ git stash apply
移動先でのファイルの変更の対処など詳しい使い方は以下をご参照ください
詳しい使い方はこちら
mergeしたけど取り消したい
maergeを取り消して前の状態に戻したいという状況で使えます
$ git merge --abort
最後に
自分自身の復習も兼ねて書きました。
チーム開発に初めて参加する方の参考になればと思います。