Gitの基本操作

Git, GitHub

この記事は最終更新日から1年以上が経過しています。

はじめに

はじめまして、FY21新卒 アプリ開発Gの深山 侑花です。

チーム開発において作業効率を高めたり、多くのファイルを管理するために利用されるバージョン管理ツールGitの運用方法についてまとめました。

0. 基礎知識

バージョン管理とは

バージョン管理とは、ファイルの追加や変更履歴を管理することをいいます。
これにより、過去の変更箇所の確認や、特定の時点の状態に戻すなどの作業が可能となります。

Gitとは

Gitとは、バージョン管理を行うためのシステムです。
Gitのバージョン管理機能を組み込んだWebベースのプラットフォームをGitHubといいます。

リポジトリとは

リポジトリとは、バージョン管理によって管理されるファイルと履歴情報を保管する領域のことをいいます。
リポジトリの配下でファイルやディレクトリを操作することで、バージョン管理を行うことができます。
Gitでは、個々のマシン上のリポジトリでの作業後、その内容をサーバー上のリポジトリに集約するという流れで開発を進めます。
その個々のリポジトリをローカルリポジトリ、集約先のサーバー上のリポジトリをリモートリポジトリと呼びます。

1. Gitの基本的な使い方

ローカルリポジトリの変更をリモートリポジトリに反映させる基本操作の説明です。

Gitは、

  1. ステージング
  2. コミット
  3. プッシュ

の流れが基本操作となります。

1-0. 作業ディレクトリをクローン(clone)する

共用リポジトリを利用して開発を進める場合、クローンして作業ディレクトリをローカルに作成します。
以下のコマンド

を実行しましょう。

1-1. コミットの準備

ローカルリポジトリで変更したファイルを、ステージングします。
ステージングとは、変更内容を一時的に保存する領域にファイルを登録することです。ステージングされたファイルがコミット対象となります。

1-2. コミット

コミットとは、ステージングされたファイルをローカルリポジトリへ追加することです。
以下のコマンドでコミットをすることができます。

-mはコミットメッセージを入力するオプションです。

1-3. リモートリポジトリへのプッシュ

ローカルリポジトリの変更をGitHub上のリモートリポジトリに反映させるプッシュと呼ばれる作業を行います。

2. ブランチ作業

2-1. ブランチとは

ブランチとは、同時進行で複数バージョンの開発を行うためのしくみです。
これにより、変更履歴を分岐した開発を行うことができます。
リポジトリを作成した際に、main、masterなどと名前のついた初期ブランチが用意されています。
初期ブランチとは別にバージョン管理上の履歴を分離し、並行して開発を進める場合、別に新規でブランチを作成し、そのブランチ上にコミットするという段取りで開発を進めることになります。

新規ブランチは以下のコマンドで作成します。

作成したブランチには checkoutコマンドで移動できます。

ローカルに存在するブランチには、 git branchコマンドで確認することができ、現在作業を行っているブランチには「*」がついています。

2-2. ブランチでのプッシュ

ブランチの変更内容を反映させる場合は以下のようにプッシュしてください。

GitHub上では、プッシュ先のブランチで変更を確認することができます。
プッシュ先ではないブランチでは変更内容が反映されないことも確認できます。

2-3. コードレビュー / マージ

ブランチで開発作業が完了したら、メインとなるブランチに変更内容を取り込むマージを行います。
マージを行う際に、作業者は、GitHub上でプルリクエストと呼ばれる機能で、変更をマージするよう要請します。

  1. GitHub上で任意のブランチを開き、[New pull request]をクリックします。
    de19469d01880aaf03af81d944b94dc7.png

  2. マージ先のブランチと現在のブランチを選択し、[Create pull request]をクリックします。
    22772fd1af4330397d1dde857b9f2b26.png

  3. マージ先のブランチと現在のブランチを確認し、プルリクエスト名やレビュー内容を記入し、[Create pull request]をクリックします。
    2148bc7ccf98ad4ec3fe3f99f8e0378e.png

他の作業者は、変更内容についてのコメントや修正の依頼を行うコードレビューを行うことができます。
以下の手法でコードレビューを行うことができます。

  1. [Pull requests]タブの[Files changed]からソースコードを確認できます。任意の行の[+]からコメントを追加することができます。
    image-20211027075708346.png

    image-20211027075728845.png

    コメントの入力が完了したら、[Start a review]でレビューを開始できます。
    すでに開始していた場合は、[Add review comment]という表記になっていると思いますので、そちらをクリックします。

  2. [Review changes]より、レビューを反映させます。

    変更に対するコメントを入力できます。
    レビューは以下の3種類があります。

  • [Comment] 変更を承認せず、コメントを残したい場合

  • [Approve] 変更をマージすることを承認する場合

  • [Request changes] 変更を承認せず、対処すべき問題がある場合

    image-20211027075745650.png

    適当なものを選択し、[Submit review]をクリックすることでレビュー完了です。

プルリクエストが承認された場合、[Pull requests]タブの[Conversation]からマージを行います。
image-20211027075758237.png

マージ先のブランチ・現在のブランチを確認し、[Merge pull request]をクリックして、マージしましょう。
image-20211027075811386.png

2-4. リモートリポジトリの変更をローカルリポジトリに反映させる

マージしたことによるリモートリポジトリの変更をローカルリポジトリに反映させるプルという作業を行います。
プルを行うことにより、リモートリポジトリの変更内容を取得し、ローカルリポジトリの内容を最新にすることができます。
次のコマンドで、プルをしましょう。

3. 便利な機能

リベース(rebase)

リベースとは、一方のブランチの変更内容をもう一方のブランチで再現することです。
マージとは異なり、統合する際に、現在までの他ブランチの変更を反映させることができます。
リベース後は、 git push --forceでサーバー上に変更を反映させることができます。

コミットの修正

git rebase -i
このコマンドを入力すると、下記のようなテキストエディタが表示され、コミットの修正が行うことができます。

pickの箇所(指示コマンド)を書き換えることで、修正を行うことができます。

指示コマンドは以下の通りです。

コマンド 説明
pick コミットをそのまま残す。
reword コミットメッセージを変更する。
edit コミット自体の内容を編集。
sqush コミットメッセージを残し、直前のpickを指定したコミットに統合
fixup コミットメッセージを削除して、直前のpickを指定したコミットに統合

リセット(reset)

リセットとは、対象のブランチの状態を特定のコミットまで巻き戻す作業です。
リセットには3種類あります。

  • --soft
    指定したコミットの状態までブランチの状態を戻します。また、指定されたコミット以降にコミットした変更差分をステージングされた状態で保持します。
  • --mixed
    指定したコミットの状態までブランチの状態を戻します。また、指定されたコミット以降にコミットした変更差分をステージングされていない状態で保持します。
  • --hard
    指定したコミットの状態までブランチの状態を戻します。また、指定されたコミット以降にコミットした変更差分を保持せず、破棄します。
    ※ 破棄した記録を復元させることはできないので、これを行う際は注意しましょう。

スタッシュ(stash)

「スタッシュする」とは、コミット前ではあるが今すぐ別の作業をしなければならないというときに、一旦現在の変更を退避させることです。
git stash -uで退避することができます。
退避した差分を、現在チェックアウトしているブランチへ適用させるためのコマンドは git stash applyです。スタッシュ名を指定しない場合、直近に退避した差分を戻します。
退避した差分は git stash listで確認することができます。

Git, GitHub