4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitAdvent Calendar 2023

Day 1

【Git】超初心者向け Gitをつかってみる その1(git init から git commitまで)

Last updated at Posted at 2023-11-30

はじめに

Git Advent Calendar 2023 1日目の投稿です。よろしくおねがいします。
新入社員のころGitを使うプロジェクトに配属された際に、わけもわからず黒い画面でaddしてcommitだけしていました。また、みんなのソースコードをぶっ壊したらどうしようとおびえながらマージをしていました。
そんな過去の自分に向けてGitが怖くなくなるように、何日かにかけてGitについてハンズオン形式で使ってみたいと思います。

この記事と次の記事で目指すところは、Gitを知らない新入社員が入ってきたプロジェクトで「Gitについてはとりあえずこの記事よんで触っといて」と渡せるような説明を書くことです。
あとは、年末年始の暇つぶしとして読んでいただければうれしいです:relaxed:
(まあ、公式でドキュメントがそろってるしネットにもこういう記事はありふれてるんですけど、アウトプットすると身につくっていうし、自分の頭の整理でもあります。)

環境

Windowsを使用して、Gitのバージョンは下記を使います。

$ git --version
git version 2.22.0.windows.1

また、Git Bashを使っています。

そもそもGitって?

GitはLinuxカーネルの開発をサポートする目的で、Linus Torvaldsによって作成された分散バージョン管理システムです。

バージョン管理システムには他にもSubversionとかMercurialとかいろいろあるのですが、Linusはもともと使っていたバージョン管理システムBitKeeperの代わりを探した果てに自分で作ることを選んだようです。
よく、「大規模プロジェクトを効率的に取り扱いできること」や「分散開発を容易にすること」などがGitのメリットとして言われますが、新入社員のころの私にいってもピンとこないので割愛します。ここでは、便利なんだな~程度の理解で十分です。とりあえずGitの使い方に慣れましょう。

ちなみに「git」とはイギリス語のスラングで「あほ、まぬけ」を意味します。これは、Linusの命名の付け方が自分自身にちなんだ名前を付けるから…という意図があるとかないとか。

Gitを使ってみる

さっそくGitを使っていきます。
インストーラをここから入手して自身の端末にインストールしておきます。

git init

まず、フォルダをGitのリポジトリとして認識させるために打つコマンドがgit initです。
「リポジトリ」とはファイルやディレクトリの状態を記録していく場所のことです。
リポジトリに記録していくことで、「あの時のファイルの中身ってどうなってるんだろな~」って思った時に過去のある時点に戻れたり、「いま何を修正したんだっけ」となった時に過去と今のファイル間の差分を取れたりするようになります。

ではでは、さっそくリポジトリを作ってみましょう。
まずデスクトップに「git/sample」フォルダを用意します(初心者向けなので具体的な場所を指定していますが、別にどこでもいいです)。
次にGit Bashを開いて「git/sample」フォルダまで移動します。
ここでgit initします。

~/Desktop/git/sample
$ git init

すると、、

~/Desktop/git/sample
$ git init
Initialized empty Git repository in 『フォルダ名』

~/Desktop/git/sample (master)
$

メッセージを訳すと「空のGitリポジトリとして初期化」のコメントが表示されて、ディレクトリの後ろに(master)と付いたことがわかります。いったん(master)は気にしなくて大丈夫です。

これで、このフォルダはGitのリポジトリとして認識されて、ファイルやディレクトリの状態を記録していくことができるようになりました。

ここで、「git/sample」フォルダを見てみましょう。
git_init後のフォルダ.png
「.git」フォルダが生成されていることがわかります。このフォルダはGitが管理するフォルダなので、中身をいじらないでください。
Gitのファイルやディレクトリの状態や設定などすべての情報をここで管理しています。Gitのコマンドを打つとこの「.git」フォルダの中身が更新されてGit君は状況を管理しています。

アドベントカレンダー 3日目で「.git」に触れますので、そこでコマンドによって中身がどう変わるか見てみてください。

git config

実はリポジトリに作業していくためには、名前とメールアドレスの登録が必要です(細かく言うとコミットするためにコミット作成者の設定が必須です。だれがファイルを修正したかGitが把握できないからですね)。

設定にはgit configコマンドを使います。

~/Desktop/git/sample (master)
$ git config user.name "hogehoge"

~/Desktop/git/sample (master)
$ git config user.email "fugafuga"

上のコマンドを打つことで、「hogehoge」という名前で「fugafuga」というメールアドレスをもつ作業者であることをGitが認識します。

また、設定内容を確認したい場合はgit config --listでいけます。

~/Desktop/git/sample (master)
$ git config --list
core.symlinks=falseuser.name=hogehoge
user.email=fugafuga

ちなみに同一の設定内容がある場合は下のものが有効になります。

git addとgit commit

では、次にファイルをリポジトリに管理させてみましょう。
ファイルをリポジトリに登録して管理させるにはgit addgit commitコマンドを使います。

Gitでファイルを管理する場合、リポジトリに変更を登録する前にインデックスという作業内容を一時的に登録する領域へリポジトリに登録する内容を集めます。そして、インデックスに集まった作業内容をひとまとまりの変更としてコミットします(インデックスのことをステージング領域という人もいます)。

インデックスに登録するにはgit addを、インデックスに登録した内容をリポジトリに登録するにはgit commitを使います。

  • リポジトリとgit add git commitの関係
    無題.png

また、ここでは「ステージする」と言ったらインデックスにファイルを登録すること、「コミットする」と言ったらインデックスに登録されてる修正内容をリポジトリに登録することを指します。

要は、Gitは段階を踏んでリポジトリに登録して管理させることを行います。
最初使っているころは、addなんていらないだろと億劫さを感じますが、addには以下の意味があると思ってます。

  • コミットせずに複数の作業をした場合に1つのコミットに1つの作業内容をまとめられる。
  • コミットの前に冷静に修正内容を確認できる。

この辺は使っているうちに感じるようになると思いますし、賢い人が考えたシステムなので他にもいろいろなメリットがあるんだと思います。初心者の内はコミットにまとめたい内容をaddしてコミットする内容を確認してからcommitする、と覚えておけば十分かなと思ってます。

ってことで、やっていきましょう。
まず、Gitのリポジトリで空ファイル「sample.txt」を作ります。
から.png
ここでGitに戻り、git statusを打ちます。
git statusコマンドでは、作業フォルダとインデックスの状況を確認できます。

~/Desktop/git/sample (master)
$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        sample.txt

nothing added to commit but untracked files present (use "git add" to track)

日本語に訳してみると、「コミットするためにaddされているものはなく、未追跡ファイルがあるよ(追跡するにはgit addを用いよ)」とのことから、未追跡ファイル(Untracked files)に「sample.txt」があるとGitが認識してることがわかります。

  • 今の状態
    無題.png

ここで未追跡ファイルとは何なのか説明しておきます。

Gitではファイルを3つのグループに分けて管理します。

  • 追跡(tracked)
    • 既にリポジトリかインデックスに登録されたファイルのこと。履歴が管理されてる。
    • 1度コミットもしくはステージしたファイルはこの状態になっています。
  • 無視(ignored)
    • リポジトリで管理しないことが明示的に宣言されているファイルのこと。
    • 各々の環境に依存する設定ファイルなんかはこの状態にします。
  • 未追跡(untracked)
    • 上の2つのグループに属さないファイルのこと。履歴を管理していない。
    • 初めて作成されたファイルはこの状態です。

未追跡ファイルはgit commitで一度リポジトリに登録するとファイルを追跡するようになります。

では、git addgit commitを通じて、リポジトリに作業内容(今回で言ったら空ファイルの作成)を登録しましょう。

  • これからやること
    無題.png

まずは、git addです。git add ファイル名で登録できます。
特に何もコンソールには表示されないと思いますが、続けてgit statusをしてインデックスの状態を確認しましょう。変化がわかると思います。

~/Desktop/git/sample (master)
$ git add sample.txt

~/Desktop/git/sample (master)
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   sample.txt

「コミットされる変更」として、新しく「sample.txt」がインデックスに登録されました。

  • くどいかもしれませんが、一応今の状況の図
    無題.png

ちなみに、ここで作業フォルダのファイルを変更するとどうなるでしょうか(git addした後にソースコードの誤りに気付いてファイルを編集することは往々にしてありそうです)。

「sample.txt」を開いて適当に文字を打ちましょう。

  • 「sample.txt」に"hello"と入力して保存
    無題.png

ここでgit statusをしてインデックスと作業フォルダの状態を確認してみます。

~/Desktop/git/sample (master)
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   sample.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   sample.txt

コミットされる変更(Changes to be committed)として「sample.txt」が、ステージされていない変更(Changes not staged for commit)として「sample.txt」があります。

  • 今の状況
    無題.png

このまま続けてgit commitをすると、コミットされるのはあくまでもインデックスに登録した変更内容になります。先ほどの修正内容をリポジトリに登録したい場合は、再度git addをする必要があります。

今は適当にとりあえずgit addしちゃいましょう(実務でしたら、再度修正した内容をコミットに含むべきかどうか(git addすべきかどうか)考えましょう)。

  • git add後はこうなる
    無題.png

最後にインデックスに登録した作業内容をgit commitしてリポジトリに登録します。

~/Desktop/git/sample (master)
$ git commit

これを打つとデフォルトの設定では黒い画面が出てきます。これはviと呼ばれるエディタでここでコミットメッセージを入力して作業内容がなんなのか後で見返せるようになります。
初心者向けにviで覚えておくべきは以下の4つかなと思います(Gitを使う上でとりあえずの4つ)。

  • i:コマンドモードから入力モードに移動
  • Escキー:入力モードからコマンドモードに移動
  • :q!⇒Enterキー:保存せず終了(コマンドモード)
  • :wq⇒Enterキー:保存して終了(コマンドモード)

まずはiを押して入力モードにして1行目にコミットメッセージ、必要に応じて詳細なコメントを3行目以降に書いてEscキーでコマンドモードへ、:wqEnterキーを押して登録できます。
また、まれによくコミットしたくなくなる時があります。そんな時に使うのが:q!コマンドです。
今回はコミットメッセージに「はじめてのコミット」と入力して、リポジトリに作業内容を登録しましょう。

  • コミットメッセージを入力
    無題.png
    ↑の中にも書いてありますが、#で始まるのはコミットメッセージとして無視されるので問題ありません。

「コミットメッセージを間違えた、、」なんて方はgit commit --amendを使いましょう。このコマンドは直前のコミットを修正するために使います。git commit --amendをすると再度エディタが表示されますのでここでメッセージを変更しましょう。

  • git commit
    無題.png

以上でリポジトリに登録する作業が完了です。作業フォルダの内容がリポジトリに登録されましたね。

今回のまとめ

今回はgit initをしてリポジトリの作成をして、git addgit commitを通じてリポジトリにファイルを管理させるところまで行いました。まだまだGitの何がうれしいのか伝わらないかもしれませんがとりあえず使ってみることが出来れば幸いです。
間違いがあればコメントでご指摘いただけるとうれしいです:pray:

4
1
1

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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?