この記事ではgitとは何か,からbranch
の分け方checkout
,fetch
,pull
,add
,commit
,push
,pullrequest
,merge
とは何かについて簡単に記載する.
gitでのプロジェクト管理方法は以下の記事から
https://qiita.com/tarakokko3233/items/076e662aa7c93921a9a4
conflictが起きた時,変更履歴を戻したいときの対処法は以下の記事から
https://qiita.com/tarakokko3233/items/38de3bf197fc2a262d4b
gitとは?
Git は,分散型バージョン管理システム(DVCS:Distributed version control system)の一つであり、ソフトウェア開発におけるソースコードの変更を追跡および管理するために広く使用されている.個人の開発からオープンソースプロジェクト、大規模な商用プロジェクトまで、あらゆる規模のソフトウェア開発で使用されています。また、GitHubやBitbucketなどのホスティングサービスと連携することで、リモートリポジトリの管理やコラボレーションがより便利になる.
バージョン管理システム(VCS: Version Control System)とは
ファイルやプロジェクトの変更履歴を記録,追跡,および管理するためのソフトウェアツール.
まあ噛み砕いて言えば開発時に色々な機能を実装すると思うが,ある機能が実装できて,新しいバージョンにしたいとき,変更をしたバージョンでのソースコードを保存でき,いつでもそのバージョンに戻せたり,他の人と共同作業するときにデータに整合性を保つこと(つまり,保存された履歴や変更内容が改ざんされていないことを保証すること)ができるということ
gitを使うための基本用語
リポジトリ
VCSにおいて,プロジェクトのファイルや変更履歴を保存する中央の保管場所を指す.リポジトリは,プロジェクトの全てのバージョンと,それらの間の差分を含んでいる.
あるリポジトリにある.gitディレクトリ
にリポジトリのメタデータと履歴が保存される.
リポジトリには2種類あり,GitHubのようなリモート上にあるリポジトリとローカルにあるリポジトリで区別できる.
リモートリポジトリ
GitHubやGitLabなどのホスティングシステムのサーバー上に存在し,インターネットを介してアクセスできるため,チームメンバー全員がアクセスでき,変更を共有できる.
ローカルリポジトリ
開発者のコンピュータ上に存在し、直接アクセスできるため,開発者自身のみがアクセスできる.開発者が個々の作業を行い,変更をコミットして更新する.この変更をリモートリポジトリにプッシュして更新する.
クローン(clone)
リモートリポジトリのコピーをローカルに作成するコマンド.
クローンしたいディレクトリで以下のコマンドを実行してクローンする.
git clone <cloneしたいリモートリポジトリのgitURL>
gitURLは大抵はホスティングサービス(GitHubなど)でリポジトリにアクセスするときのURLを入れれば良い.
ブランチ(branch)
メインの開発ラインから独立して,新機能の開発やバグ修正などを行うために使用される機能.ブランチを使用することで,複数の開発者が同時に異なる作業を行うことができ,それらの変更を後でメインラインにマージすることができる.個人開発の時も機能を分割して整合性を高めるためにブランチを分けることをお勧めする.
Gitプロジェクトでは以下の3つの主要なブランチが使用されることが多い.
main(master)ブランチ
プロジェクトの主要なブランチで,製品版(本番環境)のコードを含む.通常,直接このブランチに変更を加えることはない.
developmentブランチ
開発用のブランチで,mainブランチから作成される.開発者は,このブランチで新機能(featureブランチ)の統合を行う.
feature/--ブランチ
新機能の開発やバグ修正のために,developmentブランチから作成される.各機能やバグ修正ごとに個別のfeatureブランチを作成する.開発が完了したら,featureブランチの変更はdevelopmentブランチにマージされる.--は,その機能の名前をつける.
機能名がEXAMDEV-001ならブランチ名はfeature/EXAMDEV-001とすると良い.
branchを作成するコマンドは以下の通りである.
git branch <branchの名前>
作業ブランチを切り替えるには以下のコマンドを実行する.
git switch <branchの名前>
リモートブランチをチェックアウトするならば
git checkout origin/<ブランチ名>
現在存在するリモート&ローカルブランチを閲覧するには
git branch -a
上記の2つのコマンドを同時に実行するコマンドは以下の通りである.
git checkout -b <branchの名前>
特定のブランチ(またはコミット)をもとに新しいブランチを作成する方法は以下のコマンド.
git branch <新しいbranchの名前> <元のブランチ(コミット)>
プルリクエスト(Pull Request)
開発者が自分のブランチで行った変更を,mainブランチや他のブランチに統合してもらうために使用する.そして,他の開発者(プロジェクト管理者など)はその変更をレビューし,コメントやフィードバックを提供することができる.必要に応じて,プルリクエストの作成者は,フィードバックに基づいて変更を修正し,ブランチを更新(プッシュ)する.
一度あるブランチのプルリクエストを作成したらそのブランチにプッシュすればプルリクエストの内容が更新される.
プッシュについては後ほど説明するのでブランチを現在の変更に更新するコマンドだと思ってほしい
プルリクエストはGitHubなどホスティングサービス上で行う.具体的には以下のように行う.
1.GitHubのリポジトリページに移動し,プルリクエストしたいブランチに移動する.
3."New pull request"ボタンをクリックする.
4."base"ブランチ(通常はmainまたはdevelopment)と"compare"ブランチ(プルリクエストを作成するブランチ)を選択する.
今回は
feature/EXAMDEV-001ブランチ
からdevelopmentブランチ
にプルリクエストを作成する.
7."Create pull request"ボタンをクリックする.
これでプルリクエストが作成できた.
マージ(merge)
あるブランチの変更を別のブランチに統合するプロセス.プルリクエストがレビューされ,承認された後,そのブランチの変更はメインブランチ(または指定されたブランチ)にマージすることとなる.マージが完了すると,プルリクエストのブランチは通常,削除される.マージをすると基本マージコミットが作成され,そのコミットをマージ先のブランチにてプッシュすることで統合が完了する.
プッシュについては後ほど説明する.
マージはGitHubなどホスティングサービス上で行う.
1.レビューが完了し,プルリクエストが承認されたら,"Merge pull request"ボタンをクリック.
マージの際には三種類の方法がある.
Create a merge commit
マージ時に新しいコミット(マージコミット)を作成し,両方のブランチの履歴を保持する.履歴が複雑になるが,マージの経緯を追跡できる.
コマンドでは以下の通りでできる.作業ブランチをマージ先のブランチにする.
git merge <統合したいbranch名>
Squash and merge
マージ元のブランチのすべてのコミットを1つのコミットに圧縮(スカッシュ)してから,マージ先のブランチにマージする.つまり,マージ元のブランチの個別のコミットは失われ,すべての変更が1つのコミットにまとめられる.履歴がシンプルになるが,マージ元のブランチの個別のコミットを追跡できなくなる.
コマンドでは以下の通りでできる.作業ブランチをマージ先のブランチにする.
git merge --squash <統合したいbranch名>
git commit
Rebase and merge
マージ元のブランチの変更をマージ先のブランチにリベース(再配置)してから、マージを行う.マージ元のブランチのコミットは,マージ先のブランチの先頭に順番に追加されることで,履歴がマージ先のブランチにまとまり,マージコミットは作成されない.
コマンドでは以下の通りでできる.作業ブランチをマージ先のブランチにする.
git rebase <統合したいbranch名>
git merge <統合したいbranch名>
2."Confirm merge"ボタンをクリックし,プルリクエストをマージする.
3.マージが完成したのでfeature/EXAMDEV-001ブランチ
は削除して良い.
プル(pull)
プルはリモートリポジトリから変更を取得し,現在のブランチに統合するためのGitコマンド.
リモートリポジトリから最新の変更を取得し(fetchコマンド),あるリモートブランチの変更を現在のローカルブランチに統合する(mergeコマンド)の二つを同時に実行するコマンド.
他の人の変更を反映するのによく使う
fetchコマンドは
git fetch origin
mergeコマンドは
git merge origin/<統合したいリモートブランチ名>
originとは
リモートリポジトリを表すデフォルトの名前.git clone
コマンドを使用してリポジトリをクローンすると,クローン元のリポジトリが自動的にorigin
という名前で設定される.つまり,
origin
は,リモートリポジトリの gitURLのことで,origin/main
とはリモートリポジトリの main ブランチのこと
プルのコマンドは以下の通りである.
git pull origin <統合したいリモートブランチ名>
リモートブランチとローカルブランチの違い
リモートブランチとローカルブランチは連携して機能し,リモートブランチは,リモートリポジトリの状態を表し,他の開発者との共有や同期に使用される.ローカルブランチは,実際の開発作業を行うために使用され,必要に応じてリモートブランチと同期される.
addとコミット(commit)
ワークディレクトリの変更をステージングエリアに追加(addコマンド)し,リポジトリの履歴に変更を記録する操作(commitコマンド)のこと.
addコマンドは
ワークディレクトリの全ての変更をステージングエリアに追加
git add *
ワークディレクトリのあるファイル,またはディレクトリをステージングエリアに追加
git add <ファイル名またはディレクトリ名>
commitコマンドは
git commit -m "コミットコメント"
コミット時は何について変更したのか明示するためコメントは必ず書くこと
ワーキングディレクトリ
プロジェクトのファイルが配置され,開発者が実際に作業を行う場所.
ステージングエリア
コミットする前の変更を一時的に保持する場所.
プッシュ(push)
ローカルの変更をリモートリポジトリのあるリモートブランチに送信するために使用される.
pushコマンドは
git push origin <プッシュしたいリモートブランチ名>
例でmainブランチにpushしているがmainブランチにプッシュすることは基本ないのでfeatureブランチにpushすること
以上の基礎知識を知った上でさらに便利なコマンドを知っていくと良い.さらにgitを用いたプロジェクトの進め方も学ぶと良い.