【もりけん塾】寝起きの人でも分かるgit勉強会【まとめ】

Git

今日は、もりけん塾でおこなわれた「git勉強会」を自分なりにまとめます。

こんにちは。Webコーダーのharuです。

*わたしについて*
2歳0歳の育児をしながら、22時〜2時にプログラミングを独学しています。2020.5.11~学習スタート2020.8.10~実務でコーディングしていますHTML/CSS(SCSS)/jQuery に加えWordPressの学習中です。
これからもっと知識をつけていきたく、インプット・アウトプットを続けています。

普段から学習していてわかったことや、気付きをログに残しています。
※認識の間違っている箇所があれば、ご教授いただけるとうれしいです!

【もりけん塾】寝起きの人でも分かるgit勉強会まとめ

わたしの所属している#もりけん塾 でもりけん先生(@terrace_tec)からgitについて教わったので、自分なりにまとめます。

GitHubにpush→mergeするまでのコマンド、実際のリモートリポジトリの作り方はこちらをどうぞ!

gitとは

gitとは、簡単にいうと「履歴管理ができる技術」のことです。

この技術を使うことで、

  • バックアップを取りたい
  • 過去のものを参照したり、過去に戻りたい

こんなときに便利です。

コミット(commit)とは

git管理をしている履歴のことをコミットといいます。

木に例えると、コミットの積み重ねが「ブランチ(branch)」という幹や枝になります。


(図解が壊滅的に下手くそですみません・・!笑)

根幹となる幹の部分には、main(旧master)という名前を用いるのが一般的です。

枝分かれした「枝」ブランチには、自由に名前をつけることができます。

  • release
  • develope
  • feature/任意の名前

のようにgit-flowという考え方に基づいた命名をするのが一般的です。

git-flowについては、もし良ければ過去のアウトプットをどうぞ!

 

コミットには、それぞれ

  • コミット番号・・・コミットの識別のために自動的に作られるもの
  • コミットメッセージ・・・開発者に変更内容を知らせるもの

があります。コミットメッセージは、自分で記述をします。

この図は、テキトーにメッセージを付けました。

過去のコミットに戻ってやり直すこともできる

たとえば、「a3に戻ってやり直したい」という例を見てみましょう。

a3のコミット(履歴)に戻って、新しくブランチを切ります。(ブランチを新しく作ることを、ブランチを切るといいます)

そこから、新しいコミットを積み重ねることができます。やり直すことができるのですね。

今積み上げているコミットの先端のことを「HEAD」と呼びます。

そして、最後に新しく修正したコミットを、元のmainブランチに取り込みます。

HEADの内容を「a4」と比べて、差分を「a5」に取り込みます。

この作業のことをmerge(マージ)といいます。

rebase(リベース)

mergeは、

  • 元々のコミット
  • 新しく修正したコミット

のそれぞれの履歴を残すのに対して、

rebase(リベース)は、”1本の履歴” にすることができます。

先ほどの図の新しいコミットをb1,b2とすると

下図のように、a4から、b1/b2と枝を伸ばすことができます。

rebaseは、mergeのコミット(a5)が作られず、履歴がすっきり見えることから

開発現場では好まれることが多いそうです。(rebase今回初めて知りました・・!)

リポジトリ

リポジトリとは、git管理したい開発中のライブラリやプロジェクトのリソースをまとめてある箱のことです。のことです。主に以下の2つあります。

  • ローカルリポジトリ・・・PC上にあるローカルなリポジトリ
  • リモートリポジトリ・・・Web上にある一般公開されているリポジトリ

後者のリモートリポジトリを管理しているサービスが、GitHubです!

それぞれがリモートで作っているものを、自分のGitHubに上げて管理することができます。

リポジトリの作り方

GitHubのリポジトリは、

以上の2つがあります。

わたしはリモートからしか作ったことがないです。もりけん先生も同様におっしゃっていました。

clone(クローン)

clone(クローン)する とは、リモートリポジトリを自分のPCに複製することです。

git clone リポジトリのURL

のコマンドで、カレントディレクトリ(今開いているディレクトリ)に複製が可能です。

クローンをおこなうと、

  • ローカルブランチ
  • リモート追跡ブランチ

の2つがローカルに作られます。

  • ローカルブランチは、クローンした時点のリモートと同じブランチです。
  • リモート追跡ブランチとは、リモートブランチの変更を参照しているものです。

以下のコマンドで、参照のみすることができます。

git branch -a

このコマンドを打つと、ローカルブランチとリモート追跡ブランチが一緒に表示されます。

remote/ ~ と書かれているブランチがリモート追跡ブランチです。

・ローカルブランチ→ 実際にコミット履歴を積んでいくところ
・リモート追跡ブランチ→ リモートブランチ内のブランチを参照しているもの

folk(フォーク)

folk(フォーク)する とは、他の人のGitHubにあるリポジトリを、自分のGitHub上に取り込むことです。

クローンと似ているけど、取り込む先が違います。

また、GitHubに取り込むだけでは、開発を行うことはできません。

フォークしたリポジトリ→自分のPCにクローンしてから開発を行います。

実際の開発の流れ(issueとpull-request)

まず用語からです。

<Issue>
Issueとは、掲示板のような場所で、開発者たちが議論をする場のことです。

  • この部分をこうしたい
  • このバグを直して欲しい
  • 機能を追加したい

などの提案や議論がされます。

実際のGitHub上では、こちらにあります。

(それぞれのリポジトリ > Issueタブ)

このIssueの議論に対して、実際に「直しました!」と開発したものを提示するのがpull-requestです。

pull-requestは、本人のみならず他の開発者もおこなうことができます。

アナログで申し訳ないですが、流れを書いてみました。

このようにpull-requestの内容を確認してOKであれば、オーナーがmainブランチに対してmergeを行います。

こうして変更を取り込むことができます。

さらに、他の開発者がいる場合は、変更後のリポジトリをpullすることで、それぞれのローカルリポジトリに最新の情報を取り込むことができます。

git pullをすると、ローカルリポジトリでは何が起こるのか?
・リモート追跡ブランチに、新しいコミットが追加される。(git fetch)
・更新されたリモート追跡ブランチが、ローカルブランチにmergeされる。
→よって、git fetchgit mergeの2つが行われている。

 pull-requestを送るまでの流れ

①いつもの作業している場所(=ワーキングツリーと呼ばれる)で、

git add

することで変更した箇所が「インデックス」に追加される。(“ステージング”という)

②インデックスされた変更を確認し、OKだったら

git commit -m "コミットメッセージを書く"

でコミットする。これで、ローカルリポジトリのコミット履歴に最新の変更が追加されました。

③ローカルリポジトリの内容を、リモートにpushします。

git push origin head

④すると、GitHub上でpull requestしますか?の表示が出る

Compare & pull requestの緑ボタンを押す

⑤内容を確認して、Create pull requestボタンを押すとpull requestが完了する。

(⑥続いてmergeボタンを押せば、リモートのmainブランチに最新のコミットが追加されて、誰もが変更を見ることができるようになります。)

pull-requestをどこのブランチにマージさせるのか

これは、自分でマージ先を指定することができます。

下図のわたしのアイコン上にある、base:main ← Compare:coding1という部分です。

今は、取り込み先を「main」に設定しあります。

リモートにpushした最新のHEADと、元々のmainのコミットを比較して、

その差分がmergeすることで取り込まれます。

この差分のことをdiffといい、コマンドを使えば、この差分を確認することができます。

//push前にリモートとの変更点を見る
git diff リモートブランチ名..HEAD

//git addする前
git diff

//git add後
git diff --cashed

git diffを細かく指定するコマンドはこちらに詳しくありました。

コマンドの詳細

今回は、初心者向けにGitの考え方についての教えをいただきました。

詳細のコマンドにつきましては、もしよろしければ、以前にアウトプットした記事をご参照ください!

 

あとがき

もりけん先生、わざわざ資料を作成して講義してくださりありがとうございました!

とてもわかりやすく、大変勉強になりました!次回の勉強会も楽しみです( ﹡ˆoˆ﹡ )

 

今日は以上です!

★Thanks:師匠「もりけんさん」(@terrace_tec)

もりけんさんのHPはこちら

★私が「実務プロジェクト」でお仕事をいただいているクライアントのあきらさん(@akira0727x)がYouTubeをはじめました!

Web制作で結果を出すためのノウハウを公開されています✨