Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
57
Help us understand the problem. What is going on with this article?
@mumucochimu

分かったつもりで分かっていなかったGit、GitHub①

タイトルの通り、分かったつもりだったんですよ。
でも、個人でしか使っていなかったしGithubDesktopで使っていたのでよく分かっていなかったのです。
きちんと理解すべく勉強してみました!

間違い等あればご指摘お願い致します。

GitとGitHub

Git

ファイルの変更履歴を記録できるバージョン管理システムです。
いつ、何を変更したかが一目瞭然です。

GItHub

Gitを使ったWebサービスです。
お互いのコードをレビューしたりできるなど、チーム開発を便利にできます。

リポジトリ

リポジトリとは保管庫とか棚と考えれば分かりやすいと思います。
以下の絵のようなイメージですかね。

自由 - Frame 2.jpg

ローカルリポジトリとリモートリポジトリ

ローカルリポジトリは自分のPC上のリポジトリで、リモートリポジトリはWeb上のリポジトリです。
ここまでは理解できます。
私が理解できなかったのはaddとかpushとかのコマンドでどういう状態になっているかということです。
これはGitの構造を理解することで解決できました。

まずはコマンドから説明し、最後に絵でまとめを説明します。

add

自分の作業ディレクトリからステージング環境へ追加することです。

//今の作業ディレクトリ以下全ての変更を追加する
$ git add .

//指定したファイルだけ追加する
$ git sample.txt

commit

ステージング環境からローカルリポジトリへ追加することです。

$ git commit -m "○○○の変更"

push

ローカルリポジトリからリモートリポジトリへ追加することです。

$ git push origin <リモートリポジトリ名>

最後に絵で流れを説明します。

自由 - Frame 1.jpg

forkとclone

こちらも先に説明をして最後に絵で説明します。

fork

AさんのGitHub上のリモートリポジトリをBさんのリモートリポジトリにコピーすることです。
コピーすることでAさんのリポジトリには影響を与えず色々試せるということです。
forkは以下のようにGitHub上で行うことができます。

スクリーンショット 2021-05-02 23.07.44.png

clone

AさんのリモートリポジトリからBさんのローカルリポジトリにダウンロードすることです。
もしくはBさんのリモートリポジトリからBさんのローカルリポジトリにダウンロードすることです。
cloneは以下のようにGitHub上で行うかコマンドで行うことができます。

スクリーンショット 2021-05-02 23.12.12.png

コマンドの場合は上記のURLをコピーし以下のコマンドを入力します。

$ git clone <URL>

以下がforkとcloneを絵で説明したものです。

自由 - Frame 1 (1).jpg

branch(ブランチ)

これは図で説明するのが分かりやすいですかね。
1つのリポジトリから派生して作業することで、複数人で作業することができたり、元のリポジトリに影響を与えずにコードの変更ができたりします。
ブランチを作成することをブランチを切ると言います。
なんかこう、パラレルワールド的な感じですよね。並行世界がある感じ。

自由 - Frame 2 (1).jpg

ブランチの切り方はプロジェクトによって様々だと思いますが、GitFlowとかを見るとmain(本番環境用)からdevelopブランチ(開発)を切り、そこからさらに細かくブランチを切っていくというのが多いみたいです。

ブランチを切る際のコマンドは以下です。

//以下のコマンドで今いるブランチを確認
$ git branch
例: *develop
*<-このマークが今いるブランチを表す

//以下のコマンドで今いるブランチから新しくブランチを切る
$ git checkout -b sample1
->sample1というdevelopから派生したブランチを切ることができた

pullrequest(プルリクエスト)とmerge(マージ)

例えばBさんがfeatureブランチで作業していて「変更したよ」とpushします。
それをdevelopブランチに合体させてもいいかを「確認して欲しいよー」とリクエストするのがpullrequest(プルリクエスト)で、OKが出て合体することをmerge(マージ)と言います。

以下が説明の図です。

説明①
自由 - Frame 1 (2).jpg

説明②
自由 - Frame 2 (2).jpg

pullとfetchとmerge

pullはfetchとmergeを組み合わせたものなのですが、わかりにくいので図で説明します。

先にどういう時に使うかを説明します。

例えば、AさんとBさんがいてそれぞれ同じリモートリポジトリからcloneしています。
Aさんがローカルで作業をしリモートリポジトリに反映させたものを、Bさんのローカルにも反映させたいという時にpullを使います。

コマンドは以下です。

//pull
$ git pull

//fetch
$ git fetch

//merge
$ git merge

ここで私のつまづいたポイントであるリモート追跡ブランチというものが出てきます。

リモートブランチはリモートリポジトリの中にあるもの。
ローカルブランチはローカルリポジトリに中にあるもので、普段pushするところ。
リモート追跡ブランチはローカルリポジトリに中にあり、リモートリポジトリをローカルにコピーしただけの読み取り専用のもの。

言葉だと分かりにくいので図にします。

自由 - Frame 2 (3).jpg

今回は以上です。
次はrevert(リバート)やrebase(リベース)などまとめようと思います!

57
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
prum
エンジニアが日本で一番成長できる環境を作り続ける

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
57
Help us understand the problem. What is going on with this article?