最近開発にも手を出していので、Gitでのコード管理を始めました。
個人利用でなんとなくしか利用してこなかったので、ブランチとかの概念がガバガバで結構つまづいたので、備忘として利用したコマンド記します。
ブランチって何よ。
- リポジトリ配下の作業フォルダみたいなもの。
基本的には、リポジトリを作成した時にmainやmasterのようなメインで利用するブランチが切られている。
だが、これにガンガンコードとか追加していくと不整合が出てきたり、ちょっと違う仕様のものを管理したいシーンが出てくる。
そんな時ブランチを使うことで、メインブランチとは別に安全に開発を進められます。
新規の機能はfeture/hogehoge(機能名)のようなブランチを切ってそこで作成し、動作が問題ないようなら、メインで利用しているブランチにマージ(統合)する。
また、ブランチごとに環境をビルドして機能検証とかにも利用する。
認証つけるか、つけないかとか。
要するに集団で開発してる時には必ず使います。
流れ的には、ブランチ切る⇨作業する⇨確認しても問題なければメインにマージ⇨ブランチは削除する。といった感じ。
作業環境でブランチ切り替えるコマンド叩くと、その中身のファイルも変更されます。
操作イメージ
- 説明用要素
- 利用リポジトリ名
- hogehoge-repo
- 存在するブランチ
- * master(アスタリスクがついているのが、現在のブランチ)
- feture/aurh
- 作業環境のディレクトリ名
- ~/doc/hoge_work
hoge_workというディレクトリで作業しているとします。
現在のブランチはmasterになります。
その際に「認証機能つけてよ!ブランチは切っておいたから!」と言われた場合には、該当するブランチに移動してコードの編集/追加が必要になります。
基本的にブランチを切った場合、masterのブランチのファイルもコピーされているので、作業環境で移動してコネコネしたのち、通常利用するようにgit add . ⇨ git commit -m 認証機能追加 ⇨ git push origin feture/aurh のようにコマンドを順繰りに叩くような形式になります。
集団で開発している場合にはmainに取り込み(マージ)する場合にはプルリク等の何かしらの処理を他の人がやるフローがあるともいますが、基本はこれだけです。
実際に利用するコマンド
今はGitLensとか便利拡張にてGUI操作でいけるものがあるみたいですが、CLIの方がわかりやすかったので、コマンドラインでやっています。
つまづきやすい用語
- リモートリポジトリ
GitHubやCodeCommitなどのクラウドサービス上に存在するリポジトリ。チームメンバー全員がアクセスできる共有の場所。 - ローカルリポジトリ
自分のPC上に存在するリポジトリ。リモートリポジトリをクローン(コピー)することで作成される。 基本的には、まずリモートリポジトリをGitHubなどで作成し、そこからローカルリポジトリを作成する流れが一般的。 - リモートブランチ
リモートリポジトリ上に存在するブランチ。チームメンバー全員が見ることができる。 ローカルの変更内容をリモートブランチにPush(送信)したり、リモートの変更内容をローカルにPull(取得)したりする。 - ローカルブランチ
自分のPC上に存在するブランチ。 ローカルで新しいブランチを作成しても、Pushするまではリモートには反映されない。
Gitはローカルとリモートを自動で同期するわけではありません。 故にリモートブランチに変更があった場合は、手動でPullする必要があります。 同様に、ローカルで変更した内容をリモートに反映するには、Pushする必要があります。
リポジトリとブランチの操作
- 説明用要素
リポジトリ名は「hogehoge-repo」
既存ブランチ名は「master」
新規ブランチ名は「feture/aurh」
- リポジトリに接続するコマンド
git remote https://hogehoge-repo
最初はリポジトリに接続して、そこからブランチとかの情報を都度持ってくる感じです。
- ブランチを作成するコマンド
git branch feture/aurh
- ブランチの切り替え:新しいブランチに移動
git checkout feture/aurh
masterに戻りたければ、git checkout master
- ブランチを作成し移動するコマンド
git checkout -b feture/aurh
- 現在いるブランチを確認するコマンド
git branch
リモートブランチの操作
- リモートリポジトリに存在するブランチを取得するコマンド
git fetch origin
- リモートリポジトリに存在するブランチを表示するコマンド
git branch -r
こんな感じのリターンになります。
origin/HEAD -> origin/master
origin/feture/auth
origin/master
- リモートブランチの情報を持ってくるコマンド:他導線で変更があった時
git pull origin feture/auth
- 作業内容をリモートブランチにpushするコマンド群
git add .
git commit -m コミット用のコメント
git push origin feture/aurh
ブランチのマージと削除
- ブランチをマージするコマンド
git checkout master
git merge feture/aurh
ブランチで作業した内容をメインブランチにマージ(統合)には、コンフリクト(データ重複/競合が発生すること)が発生してしまうことがあります。
その場合には、変に自身でいじる前にリポジトリの管理者に相談しチームの対応方針に従うことが肝要です。
- ローカルブランチを削除するコマンド:変更がない場合
git branch -d feture/aurh
- ローカルブランチを削除するコマンド:変更があった場合
git branch -D feture/aurh
ブランチを削除する時は削除する以外のブランチに移動してから、上記を実行する必要があります。
- リモートブランチを削除するコマンド:変更をPushしてあげる形式
git push origin --delete feture/aurh
おまけ:基本的なワークフロー
Gitの基本的なワークフロー
1. ブランチを作成し移動:git checkout -b feture/aurh
2. 作業:コードの編集、追加など
3. コミット:git add . ⇨ git commit -m コミット用のコメント
4. プッシュ:git push origin feture/aurh
5. マージ:git checkout master ⇨ git merge feture/aurh
6. ブランチの削除:git branch -d feture/aurh ⇨ git push origin --delete feture/aurh
最後に
「Gitってめんどくさそう!」って思ってましたが、存外メインで利用する要素としてはシンプルですね。
小規模以上の開発だと、色々不整合とかが起こりまくってカオスになっているのを散見しますが。。。
以上、どなたかの参考になれば幸いです。