初めまして、開発のkamiです。
初めての投稿になるので簡潔に自己紹介をさせていただきます。
私はジオンに入社する前は大学で情報学を専攻していて、2年次に休学を選択し、プログラミングスクールに通っていました。それから、エンジニアのアルバイトやインターンを経て、現在はジオンで新人エンジニアとして日々奮闘中です。
そして今回はエンジニアとして働いていくには必須になるであろうGitについて新人エンジニアなりにまとめてみました。
Gitとは
まず、そもそもGitとはなんだという方もいるかと思うので説明します。
Gitとはプログラムソースなどの変更履歴を管理する分散型のバージョン管理システムのことです。こう聞くと難しく感じるかもしれませんが、プログラムの編集などができ、ソースコード、画像ファイルなど変更履歴を管理して複数に分けて利用することができるということです。
Gitを使うことで、ソースコードに対しておこなった変更を複数人で共有し、効率よく開発を進めることができるようになります。
そもそもなぜファイルのバージョンを管理するのか?
ファイルの変更履歴を残すことで、いつ誰がどのような変更をしたか確認することができます。
そして、これらの履歴は他のメンバーにも共有することができます。
また、ファイルに何か問題が見つかっても、前の状態(特定のバージョン)に簡単に戻せます。
上記の特徴からバージョン管理をするととても便利だからです。
GitHubとは
GitHubとはGitを利用した開発者を支援するWebサービスです。最初はGitとGitHubの違いが分かりませんでしたが、Gitはツールの名前でGitHubはGitを使ったWebサービスです。
Git:誰がいつどのように編集したかを正確に把握できるバージョン管理システムのこと。
Github: Gitの仕組みと連携して、他のユーザーとやりとりしやすくしているWEBサービスの名称。
Gitは上記の通り、CUI仕様(操作するのにキーボードでの入力が必要)なので、不慣れな方にとっては使いにくいです。一方でGithubはGUI仕様(マウスだけで操作できるもの)なので、画面上でマウスを使って操作できたり、複数のユーザーでコミュニケーションをとりやすいように機能が整備されています。
また、GitHubのようなGitのホスティングサービスは他にもGitlabやBacklog、Bitbucketなど複数あります。
Git用語について
ここからはGit用語について解説していこうと思います。
Git構造
repository(リポジトリ)
ファイルやディレクトリの状態を記録する場所。いわゆる保管場所です。システムの開発プロジェクトに関連するデータの一元的な保管場所を意味します。一種のデータベースで、各工程の様々な情報を管理することができます。
local repository(ローカルリポジトリ)
自分のパソコンの中に作られる保管場所(リポジトリ)です。
remote repository(リモートリポジトリ)
自分以外の他のコンピュータの中にある、みんなで一緒に使う保管場所(リポジトリ)です。ネットワーク上に存在し、複数人でも管理ができるリポジトリ(GitHubなど)です。
clone(クローン)
リモートリポジトリの内容を自分のローカル環境(自分のPC上)にコピーするコマンドです。
fork(フォーク)
他の人のリモートリポジトリを自分のリモートリポジトリにコピーするコマンドです。
forkによるワークフロー
cloneは単に任意のリポジトリをローカルにコピーするのですが、forkは自分以外のリポジトリに対して、何らかの追加機能の実装、バグ改修を行いたいときに使用します。
init(イニット)
リポジトリを新規作成する時に使います。
initコマンドを実行すると、現在のディレクトリまたは指定したディレクトリに「.git」というリポジトリを構成するディレクトリが作成されます。
.gitにはGitで使用するファイルが新規に作成されるので、既に存在するリポジトリを再度初期化したい場合にもinitコマンドが使用されます。
pull(プル)
リモートリポジトリの内容をローカルリポジトリに取り込むことができるコマンドです。データのダウンロードのようなものです。
branch(ブランチ)
作業履歴を枝分かれさせて記録することができます。
ひとつのプロジェクトから枝分かれをさせ、別の作業を行うことを「ブランチを切る」と言います。
master branch(マスターブランチ)
プロジェクトの本流のブランチで、リポジトリに最初にコミットをすると、masterというブランチが作成されます。
merge(マージ)
修正変更を加えたブランチを元のブランチに統合することができるコマンドです。
reset(リセット)
コミットした内容を取り消すためのコマンドです。間違えてコミットしてしまった変更内容を取り消したい場合や、変更内容に誤りがあって取り消したい場合などによく使うコマンドです。
revert(リバート)
既存のコミットを取り消すためのコマンドです。新しくコミットを追加しているだけなので、既存コミットの履歴が消えるわけではなく、コミットログには残っています。
rebase(リベース)
指定したコミットをブランチを変えて作り直すことができます。また、コミットをひとまとめにしたり、ログを綺麗にすることができます。
cherry-pick(チェリーピック)
他のブランチにあるコミットを自分が今いるブランチに反映させることができます。マージは全てのコミットが取り込まれますが、チェリーピックは選択したコミットのみを取り込むことができます。
stash(スタッシュ)
作業中の変更を一時的に退避させることができます。作業中に他のブランチでの作業が必要になった時などに使います。
conflict(コンフリクト)
複数人が同じファイルの同じ場所の変更をした時に起こるエラーのことです。
コンフリクトが起きたらどの変更を優先するか決めて直します。
check out(チェックアウト)
今作業しているブランチから他の作業ブランチへ切り替えたい時に使用するコマンドです。
fetch(フェッチ)
リモートリポジトリで更新された最新データをローカルリポジトリに取得するコマンドです。
取得のみを行うので、マージが自動で行われないのがPullとの違いです。
push(プッシュ)
ローカルリポジトリの修正内容をリモートリポジトリに反映させます。
pull request(プルリクエスト)
自分がした変更をリポジトリに取り込んでもらうよう要求します。
変更を本人以外がレビューしてから反映させることで一人で作ると気付かないコードの指摘やバグや記述ミスの発見ができ、コードの品質を高めます。
もしかしたら認識違いなこともあるかもしれませんが大目に見ていただけるとありがたいです(笑)
以上となります。
文:開発部kami