13
18

More than 3 years have passed since last update.

Gitの基本 - git cloneからgit pushとブランチの削除まで

Last updated at Posted at 2021-06-26

この記事について

  • Gitを使用した開発の一連の流れを説明します
  • 「これを知っていれば基本的な開発は行える!」というレベルの内容を記載しており、「コミットを取り消したい」「Gitの設定内容を変更したい」などより詳細な内容は本記事では扱っておりません

対象読者

  • Gitを使用して開発を始めたい方
  • Gitの基本的な使い方を一通り学びたい方

Gitにおける2つのリポジトリ(リモートリポジトリとローカルリポジトリ)

Gitで使用するコマンドを説明する中でリモートリポジトリローカルリポジトリという言葉を使いますので、まずはこの2つの言葉について説明します。
基本的な概念を説明しており、細かい点までは記載できておりませんので、ざっくりとこんな感じでGitでソースが管理されていると理解いただければと思います。

リポジトリの全体像

Gitではソースの履歴管理をサーバ上のリモートリポジトリと自分のPC上のローカルリポジトリに分けて行っております。(分散型バージョン管理システム)
image.png

リポジトリとは

Gitに限ったことではないですが、バージョン管理システムにおけるリポジトリとは、バージョン管理を行う対象のファイルやディレクトリを入れるための場所です。
(英語のrepositoryの直訳が収納場所であることからもこのイメージが付きやすいかと思います)

リモートリポジトリとは

あるサーバ上に作成・管理され、開発チーム全員が共有しているリポジトリです。
参考:リモートでの作業

ローカルリポジトリとは

各開発者のPC上(ローカル環境)で作成され、そのローカル環境でのみ管理されるリポジトリです。
自分が行ったソースの変更が他の開発者に影響を与えることなくまた他の開発者が行ったソースの変更で自分が影響を受けることなくソースの履歴管理を行えます。

ローカルリポジトリで変更した内容は、リモートリポジトリに反映(後述)しない限りはリモートリポジトリに反映されませんし、
リモートリポジトリで変更した内容は、ローカルリポジトリに取込(後述)をしない限りはローカルリポジトリに反映されません。

リポジトリがリモートとローカルで別れていることのメリット

  • ローカルリポジトリでは自分が開発を行いやすいようにブランチ分けを行ったり、好きなタイミングでコミット・マージを行うことが可能です
    Subversionなど集中型バージョン管理システムでは、自分のコミットが即座にリモートリポジトリにも反映されるため、部分的にコミットなどが行いづらくなります)
  • リモートリポジトリ(サーバ)に接続していない状態でもコミット可能なため、開発環境の制約を抑えることもできます
    (集中型バージョン管理システムでは、リモートリポジトリのサーバに接続していない限りはコミットが行えないため、開発環境に制約が生まれてしまいます)

Gitでの開発流れ

ここからはGitを使用した開発の流れを説明します。
image.png

この画像の内容を以下の手順で説明します。
Gitはインストール済みとします。

  1. リモートリポジトリからローカルリポジトリを作成(コピー)
  2. ローカルリポジトリでブランチを作成
  3. ローカルの変更をステージング
  4. コミット
  5. ローカルリポジトリの変更をリモートリポジトリに反映
  6. リモートリポジトリの変更をローカルリポジトリに取込
  7. ブランチの削除(機能開発の終了後に行う)

リモートリポジトリからローカルリポジトリを作成(コピー)

サーバ上にあるリモートリポジトリを取得して、ローカルリポジトリを作成します。
ローカル環境でコマンドを実行したディレクトリの直下に、物理的にディレクトリが作成されます。

リモートリポジトリへの接続方法がhttpsの場合

git clone https://[ホスト名またはIPアドレス]/[グループ]/[リポジトリ].git

example.com上にグループsampleのリモートリポジトリtestが存在する場合

git clone https://example.com/sample/test.git

通常、画像のGitHubの例のようにリモートリポジトリ側でリポジトリのURLが表示されるため、そのURLをコピーして指定すると良いかと思います。
image.png

リモートリポジトリへの接続方法がsshの場合

(事前にSSH接続用の鍵を生成・登録してください。参考:Github使用時の例

git clone ssh://git@[ホスト名またはIPアドレス]/[グループ]/[リポジトリ].git

ローカルリポジトリでブランチを作成

feature/#1ブランチを作成して、作成したfeature/#1ブランチに移動

git checkout -b feature/#1

git checkout -bは以下2つのコマンドを実行するのと同じ結果となります。

git branch feature/#1
git checkout feature/#1

リモートリポジトリを派生元のブランチとして指定する場合
(ここではリモートリポジトリのdevelopブランチを派生元とします)

git checkout -b feature/#1 origin/develop

image.png

以下コマンドによって現在のブランチ一覧(リモートリポジトリとローカルリポジトリのすべてのブランチ)を表示することができます。

git branch -a

ローカルで変更した内容をステージング

ローカルでファイルの内容を変更した際、以下のコマンドによってファイルをステージング(commit対象として扱うこと)することができます。
ステージング対象が複数ある場合は、ファイル名またはディレクトリ名の箇所を半角空白区切りで複数分指定します。

git add ファイル名またはディレクトリ名

以下ディレクトリの場合、test1-1.txttext2-1.txttest2-2.txtの3ファイルが(内容に変更がある場合は)ステージングされる

sample1
 ┗test1-1.txt
 ┗test1-2.txt
sample2
 ┗test2-1.txt
 ┗test2-2.txt
git add sample1/test1-1.txt sample2

git add .によって変更のある全ファイルをステージングすることもできますが、意図しないファイルがステージングされ得るため、基本的にはファイル名やディレクトリ名を指定する方が良いです。

以下コマンドによって現在のステージングの状況を確認することもできます。

git status

コミット

image.png
ステージング中のファイルをコミットします。
コミットコマンドのオプションの指定方法によって、コミットログの書き方が変わります。
※ローカルリポジトリでコミットしただけでは、まだリモートリポジトリ側では変更が反映されません。

vimでコミットログを記述したい場合

git commit

vimが立ち上がりログを記述することができます。

git commitコマンドのオプションで、コミットログを記述したい場合

git commit -m "doHogeメソッドを削除"

コミットログは1行で表示されます。

git commitコマンドのオプションで、複数行でコミットログを記述したい場合

git commit -m "doHogeメソッドを削除" -m "doHogeメソッドを使用していないため"

以下コマンドによって現在使用しているブランチの過去のコミットの内容を見ることができます。

git log

ローカルリポジトリの変更をリモートリポジトリに反映

image.png

git push origin feature/#1

リモートリポジトリにfeature/#1ブランチが存在しない場合は、feature/#1ブランチが新規作成されます。
リモートリポジトリにfeature/#1ブランチが存在する場合は、既存のfeature/#1ブランチの状態が変更されます。

リモートリポジトリの変更をローカルリポジトリに取込

image.png
「リモートリポジトリ上で、feature/#1ブランチからdevelopブランチへのpull requestがマージされるなどによりdevelopの状態が変更した。そのリモートリポジトリのdevelopブランチの状態をローカルリポジトリに反映したい。」などのケースで使用します。
(ローカルリポジトリではgit checkout developによりdevelopブランチに移動しているとします)

git pull origin develop

git pull origin developは以下2つのコマンドを実行するのと同じ結果となります。

git fetch origin develop
git merge origin/develop

origin developはリモートリポジトリ、origin/developはリモート追跡ブランチを指しています。
参考:Git のブランチ機能 - リモートブランチ

ブランチの削除(機能開発の終了後に行う)

ローカルリポジトリの削除

image.png
ローカルリポジトリのfeature/#1を削除します。
自分が使用しているブランチがfeature/#1である場合にはエラーとなるため、git checkoutによって別ブランチに移動後に削除する必要があります。

git branch feature/#1 --delete

※リモートリポジトリのfeature/#1はこの段階では削除されません。

リモートリポジトリで削除したブランチをローカルリポジトリに反映

リモートリポジトリ側で削除されたブランチも含めて、最新のリモートリポジトリの内容をリモート追跡ブランチに反映します。

git fetch --prune

git branch -aによって、ブランチが削除されたことを確認できます。

参考

Git の基本
GitとSubversionの構造的な違い|GitのブランチはSubversionのブランチとは全く違うモノ
ガチで5分で分かる分散型バージョン管理システムGit
リモートでの作業
【初心者向け】git fetch、git merge、git pullの違いについて
Git のブランチ機能 - リモートブランチ

13
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
18